| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/plugin/webplugin_delegate_stub.h" | 5 #include "content/plugin/webplugin_delegate_stub.h" |
| 6 | 6 |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h" | 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h" |
| 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h" | 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h" |
| 24 #include "webkit/plugins/npapi/webplugin_delegate_impl.h" | 24 #include "webkit/plugins/npapi/webplugin_delegate_impl.h" |
| 25 #include "webkit/glue/webcursor.h" | 25 #include "webkit/glue/webcursor.h" |
| 26 | 26 |
| 27 using WebKit::WebBindings; | 27 using WebKit::WebBindings; |
| 28 using WebKit::WebCursorInfo; | 28 using WebKit::WebCursorInfo; |
| 29 using webkit::npapi::WebPlugin; | 29 using webkit::npapi::WebPlugin; |
| 30 using webkit::npapi::WebPluginResourceClient; | 30 using webkit::npapi::WebPluginResourceClient; |
| 31 | 31 |
| 32 namespace content { |
| 33 |
| 32 static void DestroyWebPluginAndDelegate( | 34 static void DestroyWebPluginAndDelegate( |
| 33 base::WeakPtr<NPObjectStub> scriptable_object, | 35 base::WeakPtr<NPObjectStub> scriptable_object, |
| 34 webkit::npapi::WebPluginDelegateImpl* delegate, | 36 webkit::npapi::WebPluginDelegateImpl* delegate, |
| 35 WebPlugin* webplugin) { | 37 WebPlugin* webplugin) { |
| 36 // The plugin may not expect us to try to release the scriptable object | 38 // The plugin may not expect us to try to release the scriptable object |
| 37 // after calling NPP_Destroy on the instance, so delete the stub now. | 39 // after calling NPP_Destroy on the instance, so delete the stub now. |
| 38 if (scriptable_object.get()) | 40 if (scriptable_object.get()) |
| 39 scriptable_object->DeleteSoon(); | 41 scriptable_object->DeleteSoon(); |
| 40 // WebPlugin must outlive WebPluginDelegate. | 42 // WebPlugin must outlive WebPluginDelegate. |
| 41 if (delegate) | 43 if (delegate) |
| 42 delegate->PluginDestroyed(); | 44 delegate->PluginDestroyed(); |
| 43 | 45 |
| 44 delete webplugin; | 46 delete webplugin; |
| 45 } | 47 } |
| 46 | 48 |
| 47 WebPluginDelegateStub::WebPluginDelegateStub( | 49 WebPluginDelegateStub::WebPluginDelegateStub( |
| 48 const std::string& mime_type, int instance_id, PluginChannel* channel) : | 50 const std::string& mime_type, int instance_id, PluginChannel* channel) : |
| 49 mime_type_(mime_type), | 51 mime_type_(mime_type), |
| 50 instance_id_(instance_id), | 52 instance_id_(instance_id), |
| 51 channel_(channel), | 53 channel_(channel), |
| 52 delegate_(NULL), | 54 delegate_(NULL), |
| 53 webplugin_(NULL), | 55 webplugin_(NULL), |
| 54 in_destructor_(false) { | 56 in_destructor_(false) { |
| 55 DCHECK(channel); | 57 DCHECK(channel); |
| 56 } | 58 } |
| 57 | 59 |
| 58 WebPluginDelegateStub::~WebPluginDelegateStub() { | 60 WebPluginDelegateStub::~WebPluginDelegateStub() { |
| 59 in_destructor_ = true; | 61 in_destructor_ = true; |
| 60 content::GetContentClient()->SetActiveURL(page_url_); | 62 GetContentClient()->SetActiveURL(page_url_); |
| 61 | 63 |
| 62 if (channel_->in_send()) { | 64 if (channel_->in_send()) { |
| 63 // The delegate or an npobject is in the callstack, so don't delete it | 65 // The delegate or an npobject is in the callstack, so don't delete it |
| 64 // right away. | 66 // right away. |
| 65 MessageLoop::current()->PostNonNestableTask(FROM_HERE, | 67 MessageLoop::current()->PostNonNestableTask(FROM_HERE, |
| 66 base::Bind(&DestroyWebPluginAndDelegate, plugin_scriptable_object_, | 68 base::Bind(&DestroyWebPluginAndDelegate, plugin_scriptable_object_, |
| 67 delegate_, webplugin_)); | 69 delegate_, webplugin_)); |
| 68 } else { | 70 } else { |
| 69 // Safe to delete right away. | 71 // Safe to delete right away. |
| 70 DestroyWebPluginAndDelegate( | 72 DestroyWebPluginAndDelegate( |
| 71 plugin_scriptable_object_, delegate_, webplugin_); | 73 plugin_scriptable_object_, delegate_, webplugin_); |
| 72 } | 74 } |
| 73 } | 75 } |
| 74 | 76 |
| 75 bool WebPluginDelegateStub::OnMessageReceived(const IPC::Message& msg) { | 77 bool WebPluginDelegateStub::OnMessageReceived(const IPC::Message& msg) { |
| 76 content::GetContentClient()->SetActiveURL(page_url_); | 78 GetContentClient()->SetActiveURL(page_url_); |
| 77 | 79 |
| 78 // A plugin can execute a script to delete itself in any of its NPP methods. | 80 // A plugin can execute a script to delete itself in any of its NPP methods. |
| 79 // Hold an extra reference to ourself so that if this does occur and we're | 81 // Hold an extra reference to ourself so that if this does occur and we're |
| 80 // handling a sync message, we don't crash when attempting to send a reply. | 82 // handling a sync message, we don't crash when attempting to send a reply. |
| 81 // The exception to this is when we're already in the destructor. | 83 // The exception to this is when we're already in the destructor. |
| 82 if (!in_destructor_) | 84 if (!in_destructor_) |
| 83 AddRef(); | 85 AddRef(); |
| 84 | 86 |
| 85 bool handled = true; | 87 bool handled = true; |
| 86 IPC_BEGIN_MESSAGE_MAP(WebPluginDelegateStub, msg) | 88 IPC_BEGIN_MESSAGE_MAP(WebPluginDelegateStub, msg) |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 return handled; | 144 return handled; |
| 143 } | 145 } |
| 144 | 146 |
| 145 bool WebPluginDelegateStub::Send(IPC::Message* msg) { | 147 bool WebPluginDelegateStub::Send(IPC::Message* msg) { |
| 146 return channel_->Send(msg); | 148 return channel_->Send(msg); |
| 147 } | 149 } |
| 148 | 150 |
| 149 void WebPluginDelegateStub::OnInit(const PluginMsg_Init_Params& params, | 151 void WebPluginDelegateStub::OnInit(const PluginMsg_Init_Params& params, |
| 150 bool* result) { | 152 bool* result) { |
| 151 page_url_ = params.page_url; | 153 page_url_ = params.page_url; |
| 152 content::GetContentClient()->SetActiveURL(page_url_); | 154 GetContentClient()->SetActiveURL(page_url_); |
| 153 | 155 |
| 154 *result = false; | 156 *result = false; |
| 155 if (params.arg_names.size() != params.arg_values.size()) { | 157 if (params.arg_names.size() != params.arg_values.size()) { |
| 156 NOTREACHED(); | 158 NOTREACHED(); |
| 157 return; | 159 return; |
| 158 } | 160 } |
| 159 | 161 |
| 160 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 162 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 161 FilePath path = | 163 FilePath path = |
| 162 command_line.GetSwitchValuePath(switches::kPluginPath); | 164 command_line.GetSwitchValuePath(switches::kPluginPath); |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 delegate_->CreateSeekableResourceClient(resource_id, range_request_id); | 414 delegate_->CreateSeekableResourceClient(resource_id, range_request_id); |
| 413 webplugin_->OnResourceCreated(resource_id, resource_client); | 415 webplugin_->OnResourceCreated(resource_id, resource_client); |
| 414 } | 416 } |
| 415 | 417 |
| 416 #if defined(OS_MACOSX) | 418 #if defined(OS_MACOSX) |
| 417 void WebPluginDelegateStub::OnSetFakeAcceleratedSurfaceWindowHandle( | 419 void WebPluginDelegateStub::OnSetFakeAcceleratedSurfaceWindowHandle( |
| 418 gfx::PluginWindowHandle window) { | 420 gfx::PluginWindowHandle window) { |
| 419 delegate_->set_windowed_handle(window); | 421 delegate_->set_windowed_handle(window); |
| 420 } | 422 } |
| 421 #endif | 423 #endif |
| 424 |
| 425 } // namespace content |
| OLD | NEW |