summaryrefslogtreecommitdiffstats
path: root/webkit/plugins
diff options
context:
space:
mode:
authorraymes@chromium.org <raymes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-10 19:28:46 +0000
committerraymes@chromium.org <raymes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-10 19:28:46 +0000
commit83d12c8ddc0ce79975db70edb0ffd35305f49ee2 (patch)
tree79bd1b1125f32b97616d9b1ca7ad2555d6fa1e04 /webkit/plugins
parente981b3fa852cdbf3bb098e4ebf2d1def635b90c2 (diff)
downloadchromium_src-83d12c8ddc0ce79975db70edb0ffd35305f49ee2.zip
chromium_src-83d12c8ddc0ce79975db70edb0ffd35305f49ee2.tar.gz
chromium_src-83d12c8ddc0ce79975db70edb0ffd35305f49ee2.tar.bz2
Implement an IsAllowed function in the pepper PPB_Broker_Trusted API
Flash sometimes needs to synchronously know if it can launch the broker, otherwise it will try to launch the broker when it shouldn't, and end up popping an infobar. This adds an IsAllowed function to synchronously test whether the broker is allowed to launch without popping the infobar. Note that the document URL of the plugin instance is needed in order to check the broker permissions in the browser process. This is only available in the renderer process. In order to avoid an extra hop to the renderer process just to get this URL, it is sent to the browser (with the render view ID) upon initialization of the instance when the instance is registered with the browser process. BUG=163248 Review URL: https://chromiumcodereview.appspot.com/11316316 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172104 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/plugins')
-rw-r--r--webkit/plugins/ppapi/host_var_tracker_unittest.cc2
-rw-r--r--webkit/plugins/ppapi/plugin_module.cc8
-rw-r--r--webkit/plugins/ppapi/plugin_module.h8
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.cc23
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.h13
-rw-r--r--webkit/plugins/ppapi/ppapi_unittest.cc2
-rw-r--r--webkit/plugins/ppapi/ppapi_webplugin_impl.cc8
7 files changed, 40 insertions, 24 deletions
diff --git a/webkit/plugins/ppapi/host_var_tracker_unittest.cc b/webkit/plugins/ppapi/host_var_tracker_unittest.cc
index 92c4119..f2be72c 100644
--- a/webkit/plugins/ppapi/host_var_tracker_unittest.cc
+++ b/webkit/plugins/ppapi/host_var_tracker_unittest.cc
@@ -85,7 +85,7 @@ class HostVarTrackerTest : public PpapiUnittest {
TEST_F(HostVarTrackerTest, DeleteObjectVarWithInstance) {
// Make a second instance (the test harness already creates & manages one).
scoped_refptr<PluginInstance> instance2(
- PluginInstance::Create(delegate(), module()));
+ PluginInstance::Create(delegate(), module(), NULL, GURL()));
PP_Instance pp_instance2 = instance2->pp_instance();
// Make an object var.
diff --git a/webkit/plugins/ppapi/plugin_module.cc b/webkit/plugins/ppapi/plugin_module.cc
index e993554..79877d1 100644
--- a/webkit/plugins/ppapi/plugin_module.cc
+++ b/webkit/plugins/ppapi/plugin_module.cc
@@ -533,8 +533,12 @@ bool PluginModule::SupportsInterface(const char* name) {
return !!InternalGetInterface(name);
}
-PluginInstance* PluginModule::CreateInstance(PluginDelegate* delegate) {
- PluginInstance* instance = PluginInstance::Create(delegate, this);
+PluginInstance* PluginModule::CreateInstance(
+ PluginDelegate* delegate,
+ WebKit::WebPluginContainer* container,
+ const GURL& plugin_url) {
+ PluginInstance* instance = PluginInstance::Create(delegate, this, container,
+ plugin_url);
if (!instance) {
LOG(WARNING) << "Plugin doesn't support instance interface, failing.";
return NULL;
diff --git a/webkit/plugins/ppapi/plugin_module.h b/webkit/plugins/ppapi/plugin_module.h
index 0a23714..e6f3e85 100644
--- a/webkit/plugins/ppapi/plugin_module.h
+++ b/webkit/plugins/ppapi/plugin_module.h
@@ -33,6 +33,10 @@ class CallbackTracker;
class WebKitForwarding;
} // namespace ppapi
+namespace WebKit {
+class WebPluginContainer;
+} // namespace WebKit
+
namespace webkit {
namespace ppapi {
@@ -135,7 +139,9 @@ class WEBKIT_PLUGINS_EXPORT PluginModule :
const FilePath& path() const { return path_; }
const ::ppapi::PpapiPermissions& permissions() const { return permissions_; }
- PluginInstance* CreateInstance(PluginDelegate* delegate);
+ PluginInstance* CreateInstance(PluginDelegate* delegate,
+ WebKit::WebPluginContainer* container,
+ const GURL& plugin_url);
// Returns "some" plugin instance associated with this module. This is not
// guaranteed to be any one in particular. This is normally used to execute
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
index 5bdacb0..39b5e2d 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
@@ -308,14 +308,17 @@ scoped_array<const char*> StringVectorToArgArray(
// static
PluginInstance* PluginInstance::Create(PluginDelegate* delegate,
- PluginModule* module) {
+ PluginModule* module,
+ WebPluginContainer* container,
+ const GURL& plugin_url) {
base::Callback<const void*(const char*)> get_plugin_interface_func =
base::Bind(&PluginModule::GetPluginInterface, module);
PPP_Instance_Combined* ppp_instance_combined =
PPP_Instance_Combined::Create(get_plugin_interface_func);
if (!ppp_instance_combined)
return NULL;
- return new PluginInstance(delegate, module, ppp_instance_combined);
+ return new PluginInstance(delegate, module, ppp_instance_combined, container,
+ plugin_url);
}
PluginInstance::GamepadImpl::GamepadImpl(PluginDelegate* delegate)
@@ -337,12 +340,15 @@ void PluginInstance::GamepadImpl::Sample(PP_GamepadsSampleData* data) {
PluginInstance::PluginInstance(
PluginDelegate* delegate,
PluginModule* module,
- ::ppapi::PPP_Instance_Combined* instance_interface)
+ ::ppapi::PPP_Instance_Combined* instance_interface,
+ WebPluginContainer* container,
+ const GURL& plugin_url)
: delegate_(delegate),
module_(module),
instance_interface_(instance_interface),
pp_instance_(0),
- container_(NULL),
+ container_(container),
+ plugin_url_(plugin_url),
full_frame_(false),
sent_initial_did_change_view_(false),
view_change_weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
@@ -560,13 +566,9 @@ static void SetGPUHistogram(const ::ppapi::Preferences& prefs,
#endif
}
-bool PluginInstance::Initialize(WebPluginContainer* container,
- const std::vector<std::string>& arg_names,
+bool PluginInstance::Initialize(const std::vector<std::string>& arg_names,
const std::vector<std::string>& arg_values,
- const GURL& plugin_url,
bool full_frame) {
- container_ = container;
- plugin_url_ = plugin_url;
full_frame_ = full_frame;
UpdateTouchEventRequest();
@@ -2130,8 +2132,9 @@ PP_Bool PluginInstance::GetScreenSize(PP_Instance instance, PP_Size* size) {
::ppapi::Resource* PluginInstance::GetSingletonResource(
PP_Instance instance,
::ppapi::SingletonResourceID id) {
- // Flash APIs aren't implemented in-process.
+ // Flash APIs and some others aren't implemented in-process.
switch (id) {
+ case ::ppapi::BROKER_SINGLETON_ID:
case ::ppapi::FLASH_CLIPBOARD_SINGLETON_ID:
case ::ppapi::FLASH_FILE_SINGLETON_ID:
case ::ppapi::FLASH_FULLSCREEN_SINGLETON_ID:
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.h b/webkit/plugins/ppapi/ppapi_plugin_instance.h
index 07f588d..1d0aff5 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.h
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.h
@@ -104,7 +104,10 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance :
// version of PPP_Instance possible by querying the given get_plugin_interface
// function. If the plugin does not support any valid PPP_Instance interface,
// returns NULL.
- static PluginInstance* Create(PluginDelegate* delegate, PluginModule* module);
+ static PluginInstance* Create(PluginDelegate* delegate,
+ PluginModule* module,
+ WebKit::WebPluginContainer* container,
+ const GURL& plugin_url);
// Delete should be called by the WebPlugin before this destructor.
virtual ~PluginInstance();
@@ -163,10 +166,8 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance :
const ::ppapi::ViewData& view_data() const { return view_data_; }
// PPP_Instance and PPP_Instance_Private pass-through.
- bool Initialize(WebKit::WebPluginContainer* container,
- const std::vector<std::string>& arg_names,
+ bool Initialize(const std::vector<std::string>& arg_names,
const std::vector<std::string>& arg_values,
- const GURL& plugin_url,
bool full_frame);
bool HandleDocumentLoad(PPB_URLLoader_Impl* loader);
bool HandleInputEvent(const WebKit::WebInputEvent& event,
@@ -478,7 +479,9 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance :
// initialization.
PluginInstance(PluginDelegate* delegate,
PluginModule* module,
- ::ppapi::PPP_Instance_Combined* instance_interface);
+ ::ppapi::PPP_Instance_Combined* instance_interface,
+ WebKit::WebPluginContainer* container,
+ const GURL& plugin_url);
bool LoadFindInterface();
bool LoadInputEventInterface();
diff --git a/webkit/plugins/ppapi/ppapi_unittest.cc b/webkit/plugins/ppapi/ppapi_unittest.cc
index cb35126..05dbfed 100644
--- a/webkit/plugins/ppapi/ppapi_unittest.cc
+++ b/webkit/plugins/ppapi/ppapi_unittest.cc
@@ -86,7 +86,7 @@ void PpapiUnittest::SetUp() {
ASSERT_TRUE(module_->InitAsInternalPlugin(entry_points));
// Initialize the mock instance.
- instance_ = PluginInstance::Create(delegate_.get(), module());
+ instance_ = PluginInstance::Create(delegate_.get(), module(), NULL, GURL());
}
void PpapiUnittest::TearDown() {
diff --git a/webkit/plugins/ppapi/ppapi_webplugin_impl.cc b/webkit/plugins/ppapi/ppapi_webplugin_impl.cc
index 0416140..1ff2637 100644
--- a/webkit/plugins/ppapi/ppapi_webplugin_impl.cc
+++ b/webkit/plugins/ppapi/ppapi_webplugin_impl.cc
@@ -83,14 +83,14 @@ bool WebPluginImpl::initialize(WebPluginContainer* container) {
if (!init_data_->delegate)
return false;
- instance_ = init_data_->module->CreateInstance(init_data_->delegate);
+ instance_ = init_data_->module->CreateInstance(init_data_->delegate,
+ container,
+ init_data_->url);
if (!instance_)
return false;
- bool success = instance_->Initialize(container,
- init_data_->arg_names,
+ bool success = instance_->Initialize(init_data_->arg_names,
init_data_->arg_values,
- init_data_->url,
full_frame_);
if (!success) {
instance_->Delete();