cef/patch/patches/webkit_plugin_info_2015.patch

171 lines
7.3 KiB
Diff

diff --git Source/core/dom/DOMImplementation.cpp Source/core/dom/DOMImplementation.cpp
index 8aab9bb..e3286f6 100644
--- Source/core/dom/DOMImplementation.cpp
+++ Source/core/dom/DOMImplementation.cpp
@@ -241,10 +241,11 @@ Document* DOMImplementation::createDocument(const String& type,
// For that reason, the origin must be retrieved directly from init.url().
if (init.GetFrame()->IsMainFrame()) {
RefPtr<SecurityOrigin> origin = SecurityOrigin::Create(init.Url());
- plugin_data = init.GetFrame()->GetPage()->GetPluginData(origin.Get());
+ plugin_data = init.GetFrame()->GetPage()->GetPluginData(true,
+ origin.Get());
} else {
plugin_data =
- init.GetFrame()->GetPage()->GetPluginData(init.GetFrame()
+ init.GetFrame()->GetPage()->GetPluginData(false, init.GetFrame()
->Tree()
.Top()
->GetSecurityContext()
diff --git Source/core/frame/LocalFrame.cpp Source/core/frame/LocalFrame.cpp
index b64d75d..869b45d 100644
--- Source/core/frame/LocalFrame.cpp
+++ Source/core/frame/LocalFrame.cpp
@@ -927,7 +927,7 @@ ContentSettingsClient* 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 Source/core/page/Page.cpp Source/core/page/Page.cpp
index 941a30c..2c5764c 100644
--- Source/core/page/Page.cpp
+++ Source/core/page/Page.cpp
@@ -289,16 +289,30 @@ void Page::RefreshPlugins() {
for (const Page* page : AllPages()) {
// Clear out the page's plugin data.
- if (page->plugin_data_)
- page->plugin_data_ = nullptr;
+ if (page->plugin_data_main_frame_)
+ page->plugin_data_main_frame_ = nullptr;
+ if (page->plugin_data_sub_frame_)
+ page->plugin_data_sub_frame_ = nullptr;
}
}
-PluginData* Page::GetPluginData(SecurityOrigin* main_frame_origin) const {
- if (!plugin_data_ ||
- !main_frame_origin->IsSameSchemeHostPort(plugin_data_->Origin()))
- plugin_data_ = PluginData::Create(main_frame_origin);
- return plugin_data_.Get();
+PluginData* Page::GetPluginData(bool is_main_frame,
+ SecurityOrigin* main_frame_origin) const {
+ if (is_main_frame) {
+ if (!plugin_data_main_frame_ ||
+ !main_frame_origin->IsSameSchemeHostPort(
+ plugin_data_main_frame_->Origin())) {
+ plugin_data_main_frame_ = PluginData::Create(true, main_frame_origin);
+ }
+ return plugin_data_main_frame_.Get();
+ } else {
+ if (!plugin_data_sub_frame_ ||
+ !main_frame_origin->IsSameSchemeHostPort(
+ plugin_data_sub_frame_->Origin())) {
+ plugin_data_sub_frame_ = PluginData::Create(false, main_frame_origin);
+ }
+ return plugin_data_sub_frame_.Get();
+ }
}
void Page::SetValidationMessageClient(ValidationMessageClient* client) {
diff --git Source/core/page/Page.h Source/core/page/Page.h
index e644faa..2fe0d37 100644
--- Source/core/page/Page.h
+++ Source/core/page/Page.h
@@ -132,7 +132,8 @@ class CORE_EXPORT Page final : public GarbageCollectedFinalized<Page>,
ViewportDescription GetViewportDescription() const;
static void RefreshPlugins();
- PluginData* GetPluginData(SecurityOrigin* main_frame_origin) const;
+ PluginData* GetPluginData(bool is_main_frame,
+ SecurityOrigin* main_frame_origin) const;
EditorClient& GetEditorClient() const { return *editor_client_; }
SpellCheckerClient& GetSpellCheckerClient() const {
@@ -324,7 +325,8 @@ class CORE_EXPORT Page final : public GarbageCollectedFinalized<Page>,
// longer needed.
Member<Frame> main_frame_;
- mutable RefPtr<PluginData> plugin_data_;
+ mutable RefPtr<PluginData> plugin_data_main_frame_;
+ mutable RefPtr<PluginData> plugin_data_sub_frame_;
EditorClient* const editor_client_;
SpellCheckerClient* const spell_checker_client_;
diff --git Source/platform/plugins/PluginData.cpp Source/platform/plugins/PluginData.cpp
index 03618f6..5ac59e8 100644
--- Source/platform/plugins/PluginData.cpp
+++ Source/platform/plugins/PluginData.cpp
@@ -30,11 +30,12 @@
namespace blink {
-PluginData::PluginData(SecurityOrigin* main_frame_origin)
- : main_frame_origin_(main_frame_origin) {
+PluginData::PluginData(bool is_main_frame, SecurityOrigin* main_frame_origin)
+ : is_main_frame_(is_main_frame),
+ main_frame_origin_(main_frame_origin) {
PluginListBuilder builder(&plugins_);
Platform::Current()->GetPluginList(
- false, WebSecurityOrigin(main_frame_origin_), &builder);
+ false, is_main_frame_, WebSecurityOrigin(main_frame_origin_), &builder);
for (unsigned i = 0; i < plugins_.size(); ++i) {
const PluginInfo& plugin = plugins_[i];
@@ -73,7 +74,8 @@ String PluginData::PluginNameForMimeType(const String& mime_type) const {
void PluginData::RefreshBrowserSidePluginCache() {
Vector<PluginInfo> plugins;
PluginListBuilder builder(&plugins);
- Platform::Current()->GetPluginList(true, WebSecurityOrigin::CreateUnique(),
+ Platform::Current()->GetPluginList(true, true,
+ WebSecurityOrigin::CreateUnique(),
&builder);
}
diff --git Source/platform/plugins/PluginData.h Source/platform/plugins/PluginData.h
index cdf3381..671f17c 100644
--- Source/platform/plugins/PluginData.h
+++ Source/platform/plugins/PluginData.h
@@ -52,8 +52,9 @@ class PLATFORM_EXPORT PluginData : public RefCounted<PluginData> {
WTF_MAKE_NONCOPYABLE(PluginData);
public:
- static PassRefPtr<PluginData> Create(SecurityOrigin* main_frame_origin) {
- return AdoptRef(new PluginData(main_frame_origin));
+ static PassRefPtr<PluginData> Create(bool is_main_frame,
+ SecurityOrigin* main_frame_origin) {
+ return AdoptRef(new PluginData(is_main_frame, main_frame_origin));
}
const Vector<PluginInfo>& Plugins() const { return plugins_; }
@@ -71,12 +72,13 @@ class PLATFORM_EXPORT PluginData : public RefCounted<PluginData> {
static void RefreshBrowserSidePluginCache();
private:
- explicit PluginData(SecurityOrigin* main_frame_origin);
+ explicit PluginData(bool is_main_frame, SecurityOrigin* main_frame_origin);
const PluginInfo* PluginInfoForMimeType(const String& mime_type) const;
Vector<PluginInfo> plugins_;
Vector<MimeClassInfo> mimes_;
Vector<size_t> mime_plugin_indices_;
+ bool is_main_frame_;
RefPtr<SecurityOrigin> main_frame_origin_;
};
diff --git public/platform/Platform.h public/platform/Platform.h
index eab1ca5..6657878 100644
--- public/platform/Platform.h
+++ public/platform/Platform.h
@@ -365,6 +365,7 @@ class BLINK_PLATFORM_EXPORT Platform {
// satisfy this call. mainFrameOrigin is used by the browser process to
// filter plugins from the plugin list based on content settings.
virtual void GetPluginList(bool refresh,
+ bool is_main_frame,
const WebSecurityOrigin& main_frame_origin,
WebPluginListBuilder*) {}