| Index: chrome/renderer/content_settings_observer.cc
|
| diff --git a/chrome/renderer/content_settings_observer.cc b/chrome/renderer/content_settings_observer.cc
|
| index 57de0757f4b3e8869a2f264e1855cbefe7a370b1..8c9d8c6102d9cbbc9367b608de6a5905b3169ac2 100644
|
| --- a/chrome/renderer/content_settings_observer.cc
|
| +++ b/chrome/renderer/content_settings_observer.cc
|
| @@ -26,6 +26,8 @@
|
| #include "chrome/common/extensions/chrome_extension_messages.h"
|
| #include "extensions/common/constants.h"
|
| #include "extensions/common/extension.h"
|
| +#include "extensions/common/permissions/api_permission.h"
|
| +#include "extensions/common/permissions/permissions_data.h"
|
| #include "extensions/renderer/dispatcher.h"
|
| #endif
|
|
|
| @@ -410,10 +412,15 @@ bool ContentSettingsObserver::allowStorage(bool local) {
|
| bool ContentSettingsObserver::allowReadFromClipboard(bool default_value) {
|
| bool allowed = false;
|
| #if defined(ENABLE_EXTENSIONS)
|
| - WebFrame* frame = render_frame()->GetWebFrame();
|
| - // TODO(dcheng): Should we consider a toURL() method on WebSecurityOrigin?
|
| - Send(new ChromeViewHostMsg_CanTriggerClipboardRead(
|
| - GURL(frame->document().securityOrigin().toString()), &allowed));
|
| + extensions::ScriptContext* calling_context =
|
| + extension_dispatcher_->script_context_set().GetCalling();
|
| + if (calling_context) {
|
| + const extensions::Extension* extension =
|
| + calling_context->effective_extension();
|
| + allowed = extension &&
|
| + extension->permissions_data()->HasAPIPermission(
|
| + extensions::APIPermission::kClipboardRead);
|
| + }
|
| #endif
|
| return allowed;
|
| }
|
| @@ -421,9 +428,22 @@ bool ContentSettingsObserver::allowReadFromClipboard(bool default_value) {
|
| bool ContentSettingsObserver::allowWriteToClipboard(bool default_value) {
|
| bool allowed = false;
|
| #if defined(ENABLE_EXTENSIONS)
|
| - WebFrame* frame = render_frame()->GetWebFrame();
|
| - Send(new ChromeViewHostMsg_CanTriggerClipboardWrite(
|
| - GURL(frame->document().securityOrigin().toString()), &allowed));
|
| + // All blessed extension pages could historically write to the clipboard, so
|
| + // preserve that for compatibility.
|
| + extensions::ScriptContext* calling_context =
|
| + extension_dispatcher_->script_context_set().GetCalling();
|
| + if (calling_context) {
|
| + if (calling_context->effective_context_type() ==
|
| + extensions::Feature::BLESSED_EXTENSION_CONTEXT) {
|
| + allowed = true;
|
| + } else {
|
| + const extensions::Extension* extension =
|
| + calling_context->effective_extension();
|
| + allowed = extension &&
|
| + extension->permissions_data()->HasAPIPermission(
|
| + extensions::APIPermission::kClipboardWrite);
|
| + }
|
| + }
|
| #endif
|
| return allowed;
|
| }
|
|
|