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 "webkit/plugins/ppapi/ppapi_webplugin_impl.h" | 5 #include "webkit/plugins/ppapi/ppapi_webplugin_impl.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/debug/crash_logging.h" | 9 #include "base/debug/crash_logging.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 } | 83 } |
84 | 84 |
85 bool WebPluginImpl::initialize(WebPluginContainer* container) { | 85 bool WebPluginImpl::initialize(WebPluginContainer* container) { |
86 // The plugin delegate may have gone away. | 86 // The plugin delegate may have gone away. |
87 if (!init_data_->delegate) | 87 if (!init_data_->delegate) |
88 return false; | 88 return false; |
89 | 89 |
90 instance_ = init_data_->module->CreateInstance(init_data_->delegate, | 90 instance_ = init_data_->module->CreateInstance(init_data_->delegate, |
91 container, | 91 container, |
92 init_data_->url); | 92 init_data_->url); |
93 if (!instance_) | 93 if (!instance_.get()) |
94 return false; | 94 return false; |
95 | 95 |
96 // Enable script objects for this plugin. | 96 // Enable script objects for this plugin. |
97 container->allowScriptObjects(); | 97 container->allowScriptObjects(); |
98 | 98 |
99 bool success = instance_->Initialize(init_data_->arg_names, | 99 bool success = instance_->Initialize(init_data_->arg_names, |
100 init_data_->arg_values, | 100 init_data_->arg_values, |
101 full_frame_); | 101 full_frame_); |
102 if (!success) { | 102 if (!success) { |
103 instance_->Delete(); | 103 instance_->Delete(); |
(...skipping 12 matching lines...) Expand all Loading... |
116 init_data_.reset(); | 116 init_data_.reset(); |
117 container_ = container; | 117 container_ = container; |
118 return true; | 118 return true; |
119 } | 119 } |
120 | 120 |
121 void WebPluginImpl::destroy() { | 121 void WebPluginImpl::destroy() { |
122 // Tell |container_| to clear references to this plugin's script objects. | 122 // Tell |container_| to clear references to this plugin's script objects. |
123 if (container_) | 123 if (container_) |
124 container_->clearScriptObjects(); | 124 container_->clearScriptObjects(); |
125 | 125 |
126 if (instance_) { | 126 if (instance_.get()) { |
127 ::ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(instance_object_); | 127 ::ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(instance_object_); |
128 instance_object_ = PP_MakeUndefined(); | 128 instance_object_ = PP_MakeUndefined(); |
129 instance_->Delete(); | 129 instance_->Delete(); |
130 instance_ = NULL; | 130 instance_ = NULL; |
131 } | 131 } |
132 | 132 |
133 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 133 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
134 } | 134 } |
135 | 135 |
136 NPObject* WebPluginImpl::scriptableObject() { | 136 NPObject* WebPluginImpl::scriptableObject() { |
137 // Call through the plugin to get its instance object. The plugin should pass | 137 // Call through the plugin to get its instance object. The plugin should pass |
138 // us a reference which we release in destroy(). | 138 // us a reference which we release in destroy(). |
139 if (instance_object_.type == PP_VARTYPE_UNDEFINED) | 139 if (instance_object_.type == PP_VARTYPE_UNDEFINED) |
140 instance_object_ = instance_->GetInstanceObject(); | 140 instance_object_ = instance_->GetInstanceObject(); |
141 // GetInstanceObject talked to the plugin which may have removed the instance | 141 // GetInstanceObject talked to the plugin which may have removed the instance |
142 // from the DOM, in which case instance_ would be NULL now. | 142 // from the DOM, in which case instance_ would be NULL now. |
143 if (!instance_) | 143 if (!instance_.get()) |
144 return NULL; | 144 return NULL; |
145 | 145 |
146 scoped_refptr<NPObjectVar> object(NPObjectVar::FromPPVar(instance_object_)); | 146 scoped_refptr<NPObjectVar> object(NPObjectVar::FromPPVar(instance_object_)); |
147 // If there's an InstanceObject, tell the Instance's MessageChannel to pass | 147 // If there's an InstanceObject, tell the Instance's MessageChannel to pass |
148 // any non-postMessage calls to it. | 148 // any non-postMessage calls to it. |
149 if (object) { | 149 if (object.get()) { |
150 instance_->message_channel().SetPassthroughObject(object->np_object()); | 150 instance_->message_channel().SetPassthroughObject(object->np_object()); |
151 } | 151 } |
152 NPObject* message_channel_np_object(instance_->message_channel().np_object()); | 152 NPObject* message_channel_np_object(instance_->message_channel().np_object()); |
153 // The object is expected to be retained before it is returned. | 153 // The object is expected to be retained before it is returned. |
154 WebKit::WebBindings::retainObject(message_channel_np_object); | 154 WebKit::WebBindings::retainObject(message_channel_np_object); |
155 return message_channel_np_object; | 155 return message_channel_np_object; |
156 } | 156 } |
157 | 157 |
158 NPP WebPluginImpl::pluginNPP() { | 158 NPP WebPluginImpl::pluginNPP() { |
159 return instance_->instanceNPP(); | 159 return instance_->instanceNPP(); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 void WebPluginImpl::rotateView(RotationType type) { | 296 void WebPluginImpl::rotateView(RotationType type) { |
297 instance_->RotateView(type); | 297 instance_->RotateView(type); |
298 } | 298 } |
299 | 299 |
300 bool WebPluginImpl::isPlaceholder() { | 300 bool WebPluginImpl::isPlaceholder() { |
301 return false; | 301 return false; |
302 } | 302 } |
303 | 303 |
304 } // namespace ppapi | 304 } // namespace ppapi |
305 } // namespace webkit | 305 } // namespace webkit |
OLD | NEW |