summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.cc20
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.h4
2 files changed, 24 insertions, 0 deletions
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
index 435cafb..d7d245f 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
@@ -46,6 +46,7 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h"
@@ -1651,6 +1652,8 @@ int32_t PluginInstance::LockMouse(PP_Instance instance,
}
if (lock_mouse_callback_.func)
return PP_ERROR_INPROGRESS;
+ if (!CanAccessMainFrame())
+ return PP_ERROR_NOACCESS;
lock_mouse_callback_ = callback;
// We will be notified on completion via OnLockMouseACK(), either
@@ -1673,5 +1676,22 @@ void PluginInstance::DoSetCursor(WebCursorInfo* cursor) {
fullscreen_container_->DidChangeCursor(*cursor);
}
+bool PluginInstance::CanAccessMainFrame() const {
+ if (!container_)
+ return false;
+ WebKit::WebDocument containing_document = container_->element().document();
+
+ if (!containing_document.frame() ||
+ !containing_document.frame()->view() ||
+ !containing_document.frame()->view()->mainFrame()) {
+ return false;
+ }
+ WebKit::WebDocument main_document =
+ containing_document.frame()->view()->mainFrame()->document();
+
+ return containing_document.securityOrigin().canAccess(
+ main_document.securityOrigin());
+}
+
} // namespace ppapi
} // namespace webkit
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.h b/webkit/plugins/ppapi/ppapi_plugin_instance.h
index 6109278..a035b61 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.h
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.h
@@ -399,6 +399,10 @@ class PluginInstance : public base::RefCounted<PluginInstance>,
void DoSetCursor(WebKit::WebCursorInfo* cursor);
+ // Checks if the security origin of the document containing this instance can
+ // assess the security origin of the main frame document.
+ bool CanAccessMainFrame() const;
+
PluginDelegate* delegate_;
scoped_refptr<PluginModule> module_;
scoped_ptr< ::ppapi::PPP_Instance_Combined> instance_interface_;