Index: content/browser/web_contents/web_contents_impl.cc |
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc |
index 4ce4f972db0f278193541181710e527129cdb364..e1113049d3a5c7d8a84d5f80da1c5ffa40a7c9e2 100644 |
--- a/content/browser/web_contents/web_contents_impl.cc |
+++ b/content/browser/web_contents/web_contents_impl.cc |
@@ -493,6 +493,8 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, |
IPC_BEGIN_MESSAGE_MAP(WebContentsImpl, message) |
IPC_MESSAGE_HANDLER(FrameHostMsg_PepperPluginHung, OnPepperPluginHung) |
IPC_MESSAGE_HANDLER(FrameHostMsg_PluginCrashed, OnPluginCrashed) |
+ IPC_MESSAGE_HANDLER(FrameHostMsg_PluginContentOriginAllowed, |
+ OnPluginContentOriginAllowed) |
IPC_MESSAGE_HANDLER(FrameHostMsg_DomOperationResponse, |
OnDomOperationResponse) |
IPC_MESSAGE_HANDLER(FrameHostMsg_DidChangeThemeColor, |
@@ -2568,6 +2570,10 @@ void WebContentsImpl::DidNavigateMainFramePostCommit( |
// clear the bubble when a user navigates to a named anchor in the same |
// page. |
UpdateTargetURL(GURL()); |
+ |
+ // Clear the tab-wide origin whitelist. We expect RenderFrames to clear |
+ // their replicated origin whitelist independently. |
+ plugin_content_origin_whitelist_.clear(); |
} |
if (!details.is_in_page) { |
@@ -2899,6 +2905,16 @@ void WebContentsImpl::OnPluginCrashed(const base::FilePath& plugin_path, |
PluginCrashed(plugin_path, plugin_pid)); |
} |
+void WebContentsImpl::OnPluginContentOriginAllowed(const GURL& content_origin) { |
+ DCHECK(render_frame_message_source_); |
+ DCHECK(!render_view_message_source_); |
+ |
+ plugin_content_origin_whitelist_.insert(content_origin); |
+ |
+ SendToAllFrames(new FrameMsg_UpdatePluginContentOriginWhitelist( |
+ MSG_ROUTING_NONE, plugin_content_origin_whitelist_)); |
+} |
+ |
void WebContentsImpl::OnDomOperationResponse(const std::string& json_string, |
int automation_id) { |
DomOperationNotificationDetails details(json_string, automation_id); |
@@ -3332,10 +3348,16 @@ void WebContentsImpl::RenderFrameCreated(RenderFrameHost* render_frame_host) { |
observers_, |
RenderFrameCreated(render_frame_host)); |
SetAccessibilityModeOnFrame(accessibility_mode_, render_frame_host); |
+ |
+ if (!plugin_content_origin_whitelist_.empty()) { |
+ Send(new FrameMsg_UpdatePluginContentOriginWhitelist( |
+ render_frame_host->GetRoutingID(), plugin_content_origin_whitelist_)); |
+ } |
} |
void WebContentsImpl::RenderFrameDeleted(RenderFrameHost* render_frame_host) { |
ClearPowerSaveBlockers(render_frame_host); |
+ |
FOR_EACH_OBSERVER(WebContentsObserver, |
observers_, |
RenderFrameDeleted(render_frame_host)); |