| 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/renderer/pepper/pepper_webplugin_impl.h" | 5 #include "content/renderer/pepper/pepper_webplugin_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 | 60 |
| 61 PepperWebPluginImpl::PepperWebPluginImpl( | 61 PepperWebPluginImpl::PepperWebPluginImpl( |
| 62 PluginModule* plugin_module, | 62 PluginModule* plugin_module, |
| 63 const WebPluginParams& params, | 63 const WebPluginParams& params, |
| 64 RenderFrameImpl* render_frame, | 64 RenderFrameImpl* render_frame, |
| 65 std::unique_ptr<PluginInstanceThrottlerImpl> throttler) | 65 std::unique_ptr<PluginInstanceThrottlerImpl> throttler) |
| 66 : init_data_(new InitData()), | 66 : init_data_(new InitData()), |
| 67 full_frame_(params.loadManually), | 67 full_frame_(params.loadManually), |
| 68 throttler_(std::move(throttler)), | 68 throttler_(std::move(throttler)), |
| 69 instance_object_(PP_MakeUndefined()), | 69 instance_object_(PP_MakeUndefined()), |
| 70 container_(nullptr), | 70 container_(nullptr) { |
| 71 destroyed_(false) { | |
| 72 DCHECK(plugin_module); | 71 DCHECK(plugin_module); |
| 73 init_data_->module = plugin_module; | 72 init_data_->module = plugin_module; |
| 74 init_data_->render_frame = render_frame; | 73 init_data_->render_frame = render_frame; |
| 75 for (size_t i = 0; i < params.attributeNames.size(); ++i) { | 74 for (size_t i = 0; i < params.attributeNames.size(); ++i) { |
| 76 init_data_->arg_names.push_back(params.attributeNames[i].utf8()); | 75 init_data_->arg_names.push_back(params.attributeNames[i].utf8()); |
| 77 init_data_->arg_values.push_back(params.attributeValues[i].utf8()); | 76 init_data_->arg_values.push_back(params.attributeValues[i].utf8()); |
| 78 } | 77 } |
| 79 init_data_->url = params.url; | 78 init_data_->url = params.url; |
| 80 | 79 |
| 81 // Set subresource URL for crash reporting. | 80 // Set subresource URL for crash reporting. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 104 return false; | 103 return false; |
| 105 | 104 |
| 106 if (!instance_->Initialize(init_data_->arg_names, init_data_->arg_values, | 105 if (!instance_->Initialize(init_data_->arg_names, init_data_->arg_values, |
| 107 full_frame_, std::move(throttler_))) { | 106 full_frame_, std::move(throttler_))) { |
| 108 // If |container_| is nullptr, this object has already been synchronously | 107 // If |container_| is nullptr, this object has already been synchronously |
| 109 // destroy()-ed during |instance_|'s Initialize call. In that case, we early | 108 // destroy()-ed during |instance_|'s Initialize call. In that case, we early |
| 110 // exit. We neither create a replacement plugin nor destroy() ourselves. | 109 // exit. We neither create a replacement plugin nor destroy() ourselves. |
| 111 if (!container_) | 110 if (!container_) |
| 112 return false; | 111 return false; |
| 113 | 112 |
| 114 DCHECK(!destroyed_); | |
| 115 | |
| 116 DCHECK(instance_); | 113 DCHECK(instance_); |
| 117 ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(instance_object_); | 114 ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(instance_object_); |
| 118 instance_object_ = PP_MakeUndefined(); | 115 instance_object_ = PP_MakeUndefined(); |
| 119 instance_->Delete(); | 116 instance_->Delete(); |
| 120 instance_ = nullptr; | 117 instance_ = nullptr; |
| 121 | 118 |
| 122 blink::WebPlugin* replacement_plugin = | 119 blink::WebPlugin* replacement_plugin = |
| 123 GetContentClient()->renderer()->CreatePluginReplacement( | 120 GetContentClient()->renderer()->CreatePluginReplacement( |
| 124 init_data_->render_frame, init_data_->module->path()); | 121 init_data_->render_frame, init_data_->module->path()); |
| 125 if (!replacement_plugin) | 122 if (!replacement_plugin) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 137 destroy(); | 134 destroy(); |
| 138 | 135 |
| 139 return true; | 136 return true; |
| 140 } | 137 } |
| 141 | 138 |
| 142 init_data_.reset(); | 139 init_data_.reset(); |
| 143 return true; | 140 return true; |
| 144 } | 141 } |
| 145 | 142 |
| 146 void PepperWebPluginImpl::destroy() { | 143 void PepperWebPluginImpl::destroy() { |
| 147 // TODO(tommycli): Remove once we fix https://crbug.com/588624. | |
| 148 CHECK(!destroyed_); | |
| 149 destroyed_ = true; | |
| 150 | |
| 151 container_ = nullptr; | 144 container_ = nullptr; |
| 152 | 145 |
| 153 if (instance_) { | 146 if (instance_) { |
| 154 ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(instance_object_); | 147 ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(instance_object_); |
| 155 instance_object_ = PP_MakeUndefined(); | 148 instance_object_ = PP_MakeUndefined(); |
| 156 instance_->Delete(); | 149 instance_->Delete(); |
| 157 instance_ = nullptr; | 150 instance_ = nullptr; |
| 158 } | 151 } |
| 159 | 152 |
| 160 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); | 153 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 | 293 |
| 301 bool PepperWebPluginImpl::canRotateView() { return instance_->CanRotateView(); } | 294 bool PepperWebPluginImpl::canRotateView() { return instance_->CanRotateView(); } |
| 302 | 295 |
| 303 void PepperWebPluginImpl::rotateView(RotationType type) { | 296 void PepperWebPluginImpl::rotateView(RotationType type) { |
| 304 instance_->RotateView(type); | 297 instance_->RotateView(type); |
| 305 } | 298 } |
| 306 | 299 |
| 307 bool PepperWebPluginImpl::isPlaceholder() { return false; } | 300 bool PepperWebPluginImpl::isPlaceholder() { return false; } |
| 308 | 301 |
| 309 } // namespace content | 302 } // namespace content |
| OLD | NEW |