Index: chrome/browser/renderer_host/chrome_render_message_filter.cc |
diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.cc b/chrome/browser/renderer_host/chrome_render_message_filter.cc |
index ce27cd4cf351bad4da6206568c4bbb44f7e953d4..cb13226329bef0e79e27f1541bcb7dd1b424e1d4 100644 |
--- a/chrome/browser/renderer_host/chrome_render_message_filter.cc |
+++ b/chrome/browser/renderer_host/chrome_render_message_filter.cc |
@@ -590,23 +590,29 @@ void ChromeRenderMessageFilter::GetPluginInfo( |
status->value = ChromeViewHostMsg_GetPluginInfo_Status::kAllowed; |
} |
-void ChromeRenderMessageFilter::OnCanTriggerClipboardRead(const GURL& url, |
- bool* allowed) { |
- const Extension* extension = |
- extension_info_map_->extensions().GetByURL(url); |
- *allowed = extension && |
- extension->HasAPIPermission(ExtensionAPIPermission::kClipboardRead); |
+void ChromeRenderMessageFilter::OnCanTriggerClipboardRead( |
+ const std::string& origin, bool* allowed) { |
+ // TODO(dcheng): It'd be nice to consolidate these two checks together...? |
+ *allowed = extension_info_map_->extensions().SecurityOriginHasAPIPermission( |
+ origin, ExtensionAPIPermission::kClipboardRead) && |
+ extension_info_map_->AreBindingsEnabledForProcess(render_process_id_); |
} |
-void ChromeRenderMessageFilter::OnCanTriggerClipboardWrite(const GURL& url, |
- bool* allowed) { |
+void ChromeRenderMessageFilter::OnCanTriggerClipboardWrite( |
+ const std::string& origin, bool* allowed) { |
// Since all extensions could historically write to the clipboard, preserve it |
// for compatibility. |
- const Extension* extension = |
- extension_info_map_->extensions().GetByURL(url); |
- *allowed = url.SchemeIs(chrome::kExtensionScheme) || |
- (extension && |
- extension->HasAPIPermission(ExtensionAPIPermission::kClipboardWrite)); |
+ // TODO(dcheng): Where is the right place to convert to a URL? Ideally, we'd |
Aaron Boodman
2011/10/20 06:53:51
I think in general, in Chrome, if we have a URL (o
|
+ // convert in one place. Most callers will have the origin as a string. |
+ // However, because of the special exception for clipboardWrite we need to |
+ // URL-ize the origin here as well. The alternative is to check that the |
+ // chrome extension schema is a prefix of the origin, but that seems like |
+ // somewhat of a hack... |
+ GURL origin_as_url(origin); |
+ *allowed = (origin_as_url.SchemeIs(chrome::kExtensionScheme) || |
+ extension_info_map_->extensions().SecurityOriginHasAPIPermission( |
+ origin, ExtensionAPIPermission::kClipboardWrite)) && |
+ extension_info_map_->AreBindingsEnabledForProcess(render_process_id_); |
} |
void ChromeRenderMessageFilter::OnGetCookies( |