Chromium Code Reviews| 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..106e94195df3027d10828f1199e353b8587a71d7 100644 |
| --- a/content/browser/web_contents/web_contents_impl.cc |
| +++ b/content/browser/web_contents/web_contents_impl.cc |
| @@ -493,6 +493,10 @@ 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_PluginContentMarkedPeripheral, |
| + OnPluginContentMarkedPeripheral) |
| IPC_MESSAGE_HANDLER(FrameHostMsg_DomOperationResponse, |
| OnDomOperationResponse) |
| IPC_MESSAGE_HANDLER(FrameHostMsg_DidChangeThemeColor, |
| @@ -2899,6 +2903,48 @@ 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_[render_frame_message_source_].insert( |
|
groby-ooo-7-16
2014/10/28 00:39:12
Why is this a map keyed by renderframe? AFAICT, we
Lei Zhang
2014/10/28 02:16:23
I think it's just being used to limit the number o
|
| + content_origin); |
| + |
| + // Broadcast whitelisting to all render frames with plugin content from this |
| + // origin thas has already been marked peripheral. |
| + for (auto peripheral_plugin_origins : plugin_content_marked_peripheral_) { |
| + if (peripheral_plugin_origins.second.erase(content_origin) > 0) { |
|
groby-ooo-7-16
2014/10/28 00:39:11
Hm. Is that necessary? The message is broadcast an
tommycli
2014/10/28 22:18:07
The WebContents needs to aggregate all the per-fra
|
| + Send(new FrameMsg_PluginContentOriginWhitelisted( |
| + peripheral_plugin_origins.first->GetRoutingID(), |
| + content_origin)); |
| + } |
| + } |
| +} |
| + |
| +void WebContentsImpl::OnPluginContentMarkedPeripheral( |
| + const GURL& content_origin) { |
| + DCHECK(render_frame_message_source_); |
| + DCHECK(!render_view_message_source_); |
| + |
| + bool origin_already_whitelisted = false; |
| + for (auto whitelisted_plugin_origins : plugin_content_origin_whitelist_) { |
| + if (whitelisted_plugin_origins.second.find(content_origin) != |
|
groby-ooo-7-16
2014/10/28 00:39:11
Since you're just checking for set membership:
i
tommycli
2014/10/28 22:18:07
Done.
|
| + whitelisted_plugin_origins.second.end()) { |
| + origin_already_whitelisted = true; |
| + break; |
| + } |
| + } |
| + |
| + if (origin_already_whitelisted) { |
| + Send(new FrameMsg_PluginContentOriginWhitelisted( |
| + render_frame_message_source_->GetRoutingID(), |
| + content_origin)); |
| + } else { |
| + plugin_content_marked_peripheral_[render_frame_message_source_].insert( |
| + content_origin); |
| + } |
| +} |
| + |
| void WebContentsImpl::OnDomOperationResponse(const std::string& json_string, |
| int automation_id) { |
| DomOperationNotificationDetails details(json_string, automation_id); |
| @@ -3336,6 +3382,8 @@ void WebContentsImpl::RenderFrameCreated(RenderFrameHost* render_frame_host) { |
| void WebContentsImpl::RenderFrameDeleted(RenderFrameHost* render_frame_host) { |
| ClearPowerSaveBlockers(render_frame_host); |
| + plugin_content_origin_whitelist_.erase(render_frame_host); |
| + plugin_content_marked_peripheral_.erase(render_frame_host); |
| FOR_EACH_OBSERVER(WebContentsObserver, |
| observers_, |
| RenderFrameDeleted(render_frame_host)); |