| 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 22 matching lines...) Expand all Loading... |
| 33 namespace content { | 33 namespace content { |
| 34 | 34 |
| 35 static void DestroyWebPluginAndDelegate( | 35 static void DestroyWebPluginAndDelegate( |
| 36 base::WeakPtr<NPObjectStub> scriptable_object, | 36 base::WeakPtr<NPObjectStub> scriptable_object, |
| 37 webkit::npapi::WebPluginDelegateImpl* delegate, | 37 webkit::npapi::WebPluginDelegateImpl* delegate, |
| 38 WebPlugin* webplugin) { | 38 WebPlugin* webplugin) { |
| 39 // The plugin may not expect us to try to release the scriptable object | 39 // The plugin may not expect us to try to release the scriptable object |
| 40 // after calling NPP_Destroy on the instance, so delete the stub now. | 40 // after calling NPP_Destroy on the instance, so delete the stub now. |
| 41 if (scriptable_object.get()) | 41 if (scriptable_object.get()) |
| 42 scriptable_object->DeleteSoon(); | 42 scriptable_object->DeleteSoon(); |
| 43 |
| 44 // Un-register the plugin instance as an object owner. |
| 45 WebBindings::unregisterObjectOwner(delegate->GetPluginNPP()); |
| 46 |
| 43 // WebPlugin must outlive WebPluginDelegate. | 47 // WebPlugin must outlive WebPluginDelegate. |
| 44 if (delegate) | 48 if (delegate) |
| 45 delegate->PluginDestroyed(); | 49 delegate->PluginDestroyed(); |
| 46 | 50 |
| 47 delete webplugin; | 51 delete webplugin; |
| 48 } | 52 } |
| 49 | 53 |
| 50 WebPluginDelegateStub::WebPluginDelegateStub( | 54 WebPluginDelegateStub::WebPluginDelegateStub( |
| 51 const std::string& mime_type, int instance_id, PluginChannel* channel) : | 55 const std::string& mime_type, int instance_id, PluginChannel* channel) : |
| 52 mime_type_(mime_type), | 56 mime_type_(mime_type), |
| (...skipping 16 matching lines...) Expand all Loading... |
| 69 FROM_HERE, | 73 FROM_HERE, |
| 70 base::Bind(&DestroyWebPluginAndDelegate, | 74 base::Bind(&DestroyWebPluginAndDelegate, |
| 71 plugin_scriptable_object_, | 75 plugin_scriptable_object_, |
| 72 delegate_, | 76 delegate_, |
| 73 webplugin_)); | 77 webplugin_)); |
| 74 } else { | 78 } else { |
| 75 // Safe to delete right away. | 79 // Safe to delete right away. |
| 76 DestroyWebPluginAndDelegate( | 80 DestroyWebPluginAndDelegate( |
| 77 plugin_scriptable_object_, delegate_, webplugin_); | 81 plugin_scriptable_object_, delegate_, webplugin_); |
| 78 } | 82 } |
| 83 |
| 84 // Remove the NPObject owner mapping for this instance. |
| 85 channel_->RemoveMappingForNPObjectOwner(instance_id_); |
| 79 } | 86 } |
| 80 | 87 |
| 81 bool WebPluginDelegateStub::OnMessageReceived(const IPC::Message& msg) { | 88 bool WebPluginDelegateStub::OnMessageReceived(const IPC::Message& msg) { |
| 82 GetContentClient()->SetActiveURL(page_url_); | 89 GetContentClient()->SetActiveURL(page_url_); |
| 83 | 90 |
| 84 // A plugin can execute a script to delete itself in any of its NPP methods. | 91 // A plugin can execute a script to delete itself in any of its NPP methods. |
| 85 // Hold an extra reference to ourself so that if this does occur and we're | 92 // Hold an extra reference to ourself so that if this does occur and we're |
| 86 // handling a sync message, we don't crash when attempting to send a reply. | 93 // handling a sync message, we don't crash when attempting to send a reply. |
| 87 // The exception to this is when we're already in the destructor. | 94 // The exception to this is when we're already in the destructor. |
| 88 if (!in_destructor_) | 95 if (!in_destructor_) |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 webplugin_ = new WebPluginProxy(channel_.get(), | 175 webplugin_ = new WebPluginProxy(channel_.get(), |
| 169 instance_id_, | 176 instance_id_, |
| 170 page_url_, | 177 page_url_, |
| 171 params.host_render_view_routing_id); | 178 params.host_render_view_routing_id); |
| 172 delegate_ = webkit::npapi::WebPluginDelegateImpl::Create(path, mime_type_); | 179 delegate_ = webkit::npapi::WebPluginDelegateImpl::Create(path, mime_type_); |
| 173 if (delegate_) { | 180 if (delegate_) { |
| 174 webplugin_->set_delegate(delegate_); | 181 webplugin_->set_delegate(delegate_); |
| 175 std::vector<std::string> arg_names = params.arg_names; | 182 std::vector<std::string> arg_names = params.arg_names; |
| 176 std::vector<std::string> arg_values = params.arg_values; | 183 std::vector<std::string> arg_values = params.arg_values; |
| 177 | 184 |
| 185 // Register the plugin as a valid object owner. |
| 186 WebBindings::registerObjectOwner(delegate_->GetPluginNPP()); |
| 187 |
| 188 // Add an NPObject owner mapping for this instance, to support ownership |
| 189 // tracking in the renderer. |
| 190 channel_->AddMappingForNPObjectOwner(instance_id_, |
| 191 delegate_->GetPluginNPP()); |
| 192 |
| 178 *result = delegate_->Initialize(params.url, | 193 *result = delegate_->Initialize(params.url, |
| 179 arg_names, | 194 arg_names, |
| 180 arg_values, | 195 arg_values, |
| 181 webplugin_, | 196 webplugin_, |
| 182 params.load_manually); | 197 params.load_manually); |
| 183 *transparent = delegate_->instance()->transparent(); | 198 *transparent = delegate_->instance()->transparent(); |
| 184 } | 199 } |
| 185 } | 200 } |
| 186 | 201 |
| 187 void WebPluginDelegateStub::OnWillSendRequest(int id, const GURL& url, | 202 void WebPluginDelegateStub::OnWillSendRequest(int id, const GURL& url, |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 } | 407 } |
| 393 | 408 |
| 394 void WebPluginDelegateStub::OnHTTPRangeRequestReply( | 409 void WebPluginDelegateStub::OnHTTPRangeRequestReply( |
| 395 unsigned long resource_id, int range_request_id) { | 410 unsigned long resource_id, int range_request_id) { |
| 396 WebPluginResourceClient* resource_client = | 411 WebPluginResourceClient* resource_client = |
| 397 delegate_->CreateSeekableResourceClient(resource_id, range_request_id); | 412 delegate_->CreateSeekableResourceClient(resource_id, range_request_id); |
| 398 webplugin_->OnResourceCreated(resource_id, resource_client); | 413 webplugin_->OnResourceCreated(resource_id, resource_client); |
| 399 } | 414 } |
| 400 | 415 |
| 401 } // namespace content | 416 } // namespace content |
| OLD | NEW |