| diff --git third_party/blink/public/mojom/plugins/plugin_registry.mojom third_party/blink/public/mojom/plugins/plugin_registry.mojom |
| index ff7a8ed89e94..77f44956ff22 100644 |
| --- third_party/blink/public/mojom/plugins/plugin_registry.mojom |
| +++ third_party/blink/public/mojom/plugins/plugin_registry.mojom |
| @@ -36,5 +36,5 @@ interface PluginRegistry { |
| // |
| // TODO(crbug.com/850278): We shouldn't rely on the renderer to tell us the main frame origin. |
| [Sync] |
| - GetPlugins(bool refresh, url.mojom.Origin main_frame_origin) => (array<PluginInfo> plugins); |
| + GetPlugins(bool refresh, bool is_main_frame, url.mojom.Origin main_frame_origin) => (array<PluginInfo> plugins); |
| }; |
| diff --git third_party/blink/public/platform/platform.h third_party/blink/public/platform/platform.h |
| index c7bc68000ad0..45798fbcf914 100644 |
| --- third_party/blink/public/platform/platform.h |
| +++ third_party/blink/public/platform/platform.h |
| @@ -667,6 +667,11 @@ class BLINK_PLATFORM_EXPORT Platform { |
| // runs during Chromium's build step). |
| virtual bool IsTakingV8ContextSnapshot() { return false; } |
| |
| + // DevTools ------------------------------------------------------------ |
| + |
| + virtual void DevToolsAgentAttached() {} |
| + virtual void DevToolsAgentDetached() {} |
| + |
| private: |
| static void InitializeCommon(Platform* platform, |
| std::unique_ptr<Thread> main_thread); |
| diff --git third_party/blink/renderer/core/dom/document_init.cc third_party/blink/renderer/core/dom/document_init.cc |
| index c9c761dd34e6..75afc167a60e 100644 |
| --- third_party/blink/renderer/core/dom/document_init.cc |
| +++ third_party/blink/renderer/core/dom/document_init.cc |
| @@ -200,11 +200,11 @@ DocumentInit& DocumentInit::WithTypeFrom(const String& type) { |
| if (GetFrame()->IsMainFrame()) { |
| scoped_refptr<const SecurityOrigin> origin = |
| SecurityOrigin::Create(Url()); |
| - plugin_data = GetFrame()->GetPage()->GetPluginData(origin.get()); |
| + plugin_data = GetFrame()->GetPage()->GetPluginData(true, origin.get()); |
| } else { |
| auto* top_security_origin = |
| GetFrame()->Tree().Top().GetSecurityContext()->GetSecurityOrigin(); |
| - plugin_data = GetFrame()->GetPage()->GetPluginData(top_security_origin); |
| + plugin_data = GetFrame()->GetPage()->GetPluginData(false, top_security_origin); |
| } |
| } |
| |
| diff --git third_party/blink/renderer/core/frame/local_frame.cc third_party/blink/renderer/core/frame/local_frame.cc |
| index 3c78d0089938..2f7cb6d27eea 100644 |
| --- third_party/blink/renderer/core/frame/local_frame.cc |
| +++ third_party/blink/renderer/core/frame/local_frame.cc |
| @@ -1331,7 +1331,7 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() { |
| PluginData* LocalFrame::GetPluginData() const { |
| if (!Loader().AllowPlugins(kNotAboutToInstantiatePlugin)) |
| return nullptr; |
| - return GetPage()->GetPluginData( |
| + return GetPage()->GetPluginData(IsMainFrame(), |
| Tree().Top().GetSecurityContext()->GetSecurityOrigin()); |
| } |
| |
| diff --git third_party/blink/renderer/core/inspector/devtools_session.cc third_party/blink/renderer/core/inspector/devtools_session.cc |
| index 4ee6a0ea5689..8b6d5b1a6e06 100644 |
| --- third_party/blink/renderer/core/inspector/devtools_session.cc |
| +++ third_party/blink/renderer/core/inspector/devtools_session.cc |
| @@ -8,6 +8,7 @@ |
| #include <utility> |
| #include <vector> |
| |
| +#include "third_party/blink/public/platform/platform.h" |
| #include "third_party/blink/renderer/bindings/core/v8/script_controller.h" |
| #include "third_party/blink/renderer/core/frame/local_frame.h" |
| #include "third_party/blink/renderer/core/inspector/devtools_agent.h" |
| @@ -142,6 +143,7 @@ DevToolsSession::DevToolsSession( |
| for (wtf_size_t i = 0; i < agents_.size(); i++) |
| agents_[i]->Restore(); |
| } |
| + Platform::Current()->DevToolsAgentAttached(); |
| } |
| |
| DevToolsSession::~DevToolsSession() { |
| @@ -182,6 +184,7 @@ void DevToolsSession::Detach() { |
| agents_.clear(); |
| v8_session_.reset(); |
| agent_->client_->DebuggerTaskFinished(); |
| + Platform::Current()->DevToolsAgentDetached(); |
| } |
| |
| void DevToolsSession::DispatchProtocolCommand( |
| diff --git third_party/blink/renderer/core/page/page.cc third_party/blink/renderer/core/page/page.cc |
| index 50e76a0e0a63..e3e7dcaa5352 100644 |
| --- third_party/blink/renderer/core/page/page.cc |
| +++ third_party/blink/renderer/core/page/page.cc |
| @@ -194,7 +194,8 @@ Page::Page(PageClients& page_clients) |
| MakeGarbageCollected<OverscrollController>(GetVisualViewport(), |
| GetChromeClient())), |
| link_highlight_(MakeGarbageCollected<LinkHighlight>(*this)), |
| - plugin_data_(nullptr), |
| + plugin_data_main_frame_(nullptr), |
| + plugin_data_sub_frame_(nullptr), |
| // TODO(pdr): Initialize |validation_message_client_| lazily. |
| validation_message_client_( |
| MakeGarbageCollected<ValidationMessageClientImpl>(*this)), |
| @@ -379,21 +380,41 @@ void Page::InitialStyleChanged() { |
| } |
| } |
| |
| -PluginData* Page::GetPluginData(const SecurityOrigin* main_frame_origin) { |
| - if (!plugin_data_) |
| - plugin_data_ = MakeGarbageCollected<PluginData>(); |
| +PluginData* Page::GetPluginData(bool is_main_frame, |
| + const SecurityOrigin* main_frame_origin) { |
| + if (is_main_frame) { |
| + if (!plugin_data_main_frame_) |
| + plugin_data_main_frame_ = MakeGarbageCollected<PluginData>(); |
| |
| - if (!plugin_data_->Origin() || |
| - !main_frame_origin->IsSameOriginWith(plugin_data_->Origin())) |
| - plugin_data_->UpdatePluginList(main_frame_origin); |
| |
| - return plugin_data_.Get(); |
| + if (!plugin_data_main_frame_->Origin() || |
| + !main_frame_origin->IsSameOriginWith( |
| + plugin_data_main_frame_->Origin())) { |
| + plugin_data_main_frame_->UpdatePluginList(true, main_frame_origin); |
| + } |
| + |
| + return plugin_data_main_frame_.Get(); |
| + } else { |
| + if (!plugin_data_sub_frame_) |
| + plugin_data_sub_frame_ = MakeGarbageCollected<PluginData>(); |
| + |
| + if (!plugin_data_sub_frame_->Origin() || |
| + !main_frame_origin->IsSameOriginWith( |
| + plugin_data_sub_frame_->Origin())) { |
| + plugin_data_sub_frame_->UpdatePluginList(false, main_frame_origin); |
| + } |
| + |
| + return plugin_data_sub_frame_.Get(); |
| + } |
| } |
| |
| void Page::ResetPluginData() { |
| for (Page* page : AllPages()) { |
| - if (page->plugin_data_) { |
| - page->plugin_data_->ResetPluginData(); |
| + if (page->plugin_data_main_frame_ || page->plugin_data_sub_frame_) { |
| + if (page->plugin_data_main_frame_) |
| + page->plugin_data_main_frame_->ResetPluginData(); |
| + if (page->plugin_data_sub_frame_) |
| + page->plugin_data_sub_frame_->ResetPluginData(); |
| page->NotifyPluginsChanged(); |
| } |
| } |
| @@ -906,7 +927,8 @@ void Page::Trace(Visitor* visitor) { |
| visitor->Trace(link_highlight_); |
| visitor->Trace(spatial_navigation_controller_); |
| visitor->Trace(main_frame_); |
| - visitor->Trace(plugin_data_); |
| + visitor->Trace(plugin_data_main_frame_); |
| + visitor->Trace(plugin_data_sub_frame_); |
| visitor->Trace(validation_message_client_); |
| visitor->Trace(agent_metrics_collector_); |
| visitor->Trace(plugins_changed_observers_); |
| diff --git third_party/blink/renderer/core/page/page.h third_party/blink/renderer/core/page/page.h |
| index 1074204dbfb6..e00ef8e7393a 100644 |
| --- third_party/blink/renderer/core/page/page.h |
| +++ third_party/blink/renderer/core/page/page.h |
| @@ -144,7 +144,8 @@ class CORE_EXPORT Page final : public GarbageCollected<Page>, |
| ViewportDescription GetViewportDescription() const; |
| |
| // Returns the plugin data associated with |main_frame_origin|. |
| - PluginData* GetPluginData(const SecurityOrigin* main_frame_origin); |
| + PluginData* GetPluginData(bool is_main_frame, |
| + const SecurityOrigin* main_frame_origin); |
| |
| // Resets the plugin data for all pages in the renderer process and notifies |
| // PluginsChangedObservers. |
| @@ -404,7 +405,8 @@ class CORE_EXPORT Page final : public GarbageCollected<Page>, |
| const Member<LinkHighlight> link_highlight_; |
| Member<SpatialNavigationController> spatial_navigation_controller_; |
| |
| - Member<PluginData> plugin_data_; |
| + Member<PluginData> plugin_data_main_frame_; |
| + Member<PluginData> plugin_data_sub_frame_; |
| |
| Member<ValidationMessageClient> validation_message_client_; |
| |
| diff --git third_party/blink/renderer/core/page/plugin_data.cc third_party/blink/renderer/core/page/plugin_data.cc |
| index 9b6a945105c6..63c7c43114bc 100644 |
| --- third_party/blink/renderer/core/page/plugin_data.cc |
| +++ third_party/blink/renderer/core/page/plugin_data.cc |
| @@ -91,10 +91,12 @@ void PluginData::RefreshBrowserSidePluginCache() { |
| Platform::Current()->GetBrowserInterfaceBroker()->GetInterface( |
| registry.BindNewPipeAndPassReceiver()); |
| Vector<mojom::blink::PluginInfoPtr> plugins; |
| - registry->GetPlugins(true, SecurityOrigin::CreateUniqueOpaque(), &plugins); |
| + registry->GetPlugins(true, true, SecurityOrigin::CreateUniqueOpaque(), |
| + &plugins); |
| } |
| |
| -void PluginData::UpdatePluginList(const SecurityOrigin* main_frame_origin) { |
| +void PluginData::UpdatePluginList(bool is_main_frame, |
| + const SecurityOrigin* main_frame_origin) { |
| ResetPluginData(); |
| main_frame_origin_ = main_frame_origin; |
| |
| @@ -102,7 +104,7 @@ void PluginData::UpdatePluginList(const SecurityOrigin* main_frame_origin) { |
| Platform::Current()->GetBrowserInterfaceBroker()->GetInterface( |
| registry.BindNewPipeAndPassReceiver()); |
| Vector<mojom::blink::PluginInfoPtr> plugins; |
| - registry->GetPlugins(false, main_frame_origin_, &plugins); |
| + registry->GetPlugins(false, is_main_frame, main_frame_origin_, &plugins); |
| for (const auto& plugin : plugins) { |
| auto* plugin_info = MakeGarbageCollected<PluginInfo>( |
| plugin->name, FilePathToWebString(plugin->filename), |
| diff --git third_party/blink/renderer/core/page/plugin_data.h third_party/blink/renderer/core/page/plugin_data.h |
| index d0260f9f6b1b..675ba5a7c893 100644 |
| --- third_party/blink/renderer/core/page/plugin_data.h |
| +++ third_party/blink/renderer/core/page/plugin_data.h |
| @@ -97,7 +97,8 @@ class CORE_EXPORT PluginData final : public GarbageCollected<PluginData> { |
| const HeapVector<Member<PluginInfo>>& Plugins() const { return plugins_; } |
| const HeapVector<Member<MimeClassInfo>>& Mimes() const { return mimes_; } |
| const SecurityOrigin* Origin() const { return main_frame_origin_.get(); } |
| - void UpdatePluginList(const SecurityOrigin* main_frame_origin); |
| + void UpdatePluginList(bool is_main_frame, |
| + const SecurityOrigin* main_frame_origin); |
| void ResetPluginData(); |
| |
| bool SupportsMimeType(const String& mime_type) const; |