Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: extensions/renderer/guest_view/extensions_guest_view_container.cc

Issue 983793003: Replace extensions::ScopedPersistent with v8::UniquePersistent. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "extensions/renderer/guest_view/extensions_guest_view_container.h" 5 #include "extensions/renderer/guest_view/extensions_guest_view_container.h"
6 6
7 #include "content/public/renderer/render_frame.h" 7 #include "content/public/renderer/render_frame.h"
8 #include "content/public/renderer/render_view.h" 8 #include "content/public/renderer/render_view.h"
9 #include "extensions/common/guest_view/guest_view_constants.h" 9 #include "extensions/common/guest_view/guest_view_constants.h"
10 #include "extensions/common/guest_view/guest_view_messages.h" 10 #include "extensions/common/guest_view/guest_view_messages.h"
11 #include "third_party/WebKit/public/web/WebLocalFrame.h" 11 #include "third_party/WebKit/public/web/WebLocalFrame.h"
12 #include "third_party/WebKit/public/web/WebScopedMicrotaskSuppression.h" 12 #include "third_party/WebKit/public/web/WebScopedMicrotaskSuppression.h"
13 #include "third_party/WebKit/public/web/WebView.h" 13 #include "third_party/WebKit/public/web/WebView.h"
14 14
15 namespace { 15 namespace {
16 typedef std::map<int, extensions::ExtensionsGuestViewContainer*> 16 typedef std::map<int, extensions::ExtensionsGuestViewContainer*>
17 ExtensionsGuestViewContainerMap; 17 ExtensionsGuestViewContainerMap;
18 static base::LazyInstance<ExtensionsGuestViewContainerMap> 18 static base::LazyInstance<ExtensionsGuestViewContainerMap>
19 g_guest_view_container_map = LAZY_INSTANCE_INITIALIZER; 19 g_guest_view_container_map = LAZY_INSTANCE_INITIALIZER;
20 } // namespace 20 } // namespace
21 21
22 namespace extensions { 22 namespace extensions {
23 23
24 ExtensionsGuestViewContainer::Request::Request( 24 ExtensionsGuestViewContainer::Request::Request(
25 GuestViewContainer* container, 25 GuestViewContainer* container,
26 v8::Handle<v8::Function> callback, 26 v8::Handle<v8::Function> callback,
27 v8::Isolate* isolate) 27 v8::Isolate* isolate)
28 : container_(container), 28 : container_(container), callback_(isolate, callback), isolate_(isolate) {
29 callback_(callback),
30 isolate_(isolate) {
31 } 29 }
32 30
33 ExtensionsGuestViewContainer::Request::~Request() { 31 ExtensionsGuestViewContainer::Request::~Request() {
34 } 32 }
35 33
36 bool ExtensionsGuestViewContainer::Request::HasCallback() const { 34 bool ExtensionsGuestViewContainer::Request::HasCallback() const {
37 return !callback_.IsEmpty(); 35 return !callback_.IsEmpty();
38 } 36 }
39 37
40 v8::Handle<v8::Function> 38 v8::Handle<v8::Function>
41 ExtensionsGuestViewContainer::Request::GetCallback() const { 39 ExtensionsGuestViewContainer::Request::GetCallback() const {
42 return callback_.NewHandle(isolate_); 40 return v8::Local<v8::Function>::New(isolate_, callback_);
43 } 41 }
44 42
45 ExtensionsGuestViewContainer::AttachRequest::AttachRequest( 43 ExtensionsGuestViewContainer::AttachRequest::AttachRequest(
46 GuestViewContainer* container, 44 GuestViewContainer* container,
47 int guest_instance_id, 45 int guest_instance_id,
48 scoped_ptr<base::DictionaryValue> params, 46 scoped_ptr<base::DictionaryValue> params,
49 v8::Handle<v8::Function> callback, 47 v8::Handle<v8::Function> callback,
50 v8::Isolate* isolate) 48 v8::Isolate* isolate)
51 : Request(container, callback, isolate), 49 : Request(container, callback, isolate),
52 guest_instance_id_(guest_instance_id), 50 guest_instance_id_(guest_instance_id),
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 ExtensionsGuestViewContainer::~ExtensionsGuestViewContainer() { 152 ExtensionsGuestViewContainer::~ExtensionsGuestViewContainer() {
155 if (element_instance_id() != guestview::kInstanceIDNone) { 153 if (element_instance_id() != guestview::kInstanceIDNone) {
156 g_guest_view_container_map.Get().erase(element_instance_id()); 154 g_guest_view_container_map.Get().erase(element_instance_id());
157 } 155 }
158 156
159 // Call the destruction callback, if one is registered. 157 // Call the destruction callback, if one is registered.
160 if (destruction_callback_.IsEmpty()) 158 if (destruction_callback_.IsEmpty())
161 return; 159 return;
162 v8::HandleScope handle_scope(destruction_isolate_); 160 v8::HandleScope handle_scope(destruction_isolate_);
163 v8::Handle<v8::Function> callback = 161 v8::Handle<v8::Function> callback =
164 destruction_callback_.NewHandle(destruction_isolate_); 162 v8::Local<v8::Function>::New(destruction_isolate_, destruction_callback_);
165 v8::Handle<v8::Context> context = callback->CreationContext(); 163 v8::Handle<v8::Context> context = callback->CreationContext();
166 if (context.IsEmpty()) 164 if (context.IsEmpty())
167 return; 165 return;
168 166
169 v8::Context::Scope context_scope(context); 167 v8::Context::Scope context_scope(context);
170 blink::WebScopedMicrotaskSuppression suppression; 168 blink::WebScopedMicrotaskSuppression suppression;
171 169
172 callback->Call(context->Global(), 0 /* argc */, nullptr); 170 callback->Call(context->Global(), 0 /* argc */, nullptr);
173 } 171 }
174 172
175 ExtensionsGuestViewContainer* ExtensionsGuestViewContainer::FromID( 173 ExtensionsGuestViewContainer* ExtensionsGuestViewContainer::FromID(
176 int element_instance_id) { 174 int element_instance_id) {
177 ExtensionsGuestViewContainerMap* guest_view_containers = 175 ExtensionsGuestViewContainerMap* guest_view_containers =
178 g_guest_view_container_map.Pointer(); 176 g_guest_view_container_map.Pointer();
179 auto it = guest_view_containers->find(element_instance_id); 177 auto it = guest_view_containers->find(element_instance_id);
180 return it == guest_view_containers->end() ? nullptr : it->second; 178 return it == guest_view_containers->end() ? nullptr : it->second;
181 } 179 }
182 180
183 void ExtensionsGuestViewContainer::IssueRequest(linked_ptr<Request> request) { 181 void ExtensionsGuestViewContainer::IssueRequest(linked_ptr<Request> request) {
184 EnqueueRequest(request); 182 EnqueueRequest(request);
185 PerformPendingRequest(); 183 PerformPendingRequest();
186 } 184 }
187 185
188 void ExtensionsGuestViewContainer::RegisterDestructionCallback( 186 void ExtensionsGuestViewContainer::RegisterDestructionCallback(
189 v8::Handle<v8::Function> callback, 187 v8::Handle<v8::Function> callback,
190 v8::Isolate* isolate) { 188 v8::Isolate* isolate) {
191 destruction_callback_.reset(callback); 189 destruction_callback_.Reset(isolate, callback);
192 destruction_isolate_ = isolate; 190 destruction_isolate_ = isolate;
193 } 191 }
194 192
195 void ExtensionsGuestViewContainer::RegisterElementResizeCallback( 193 void ExtensionsGuestViewContainer::RegisterElementResizeCallback(
196 v8::Handle<v8::Function> callback, 194 v8::Handle<v8::Function> callback,
197 v8::Isolate* isolate) { 195 v8::Isolate* isolate) {
198 element_resize_callback_.reset(callback); 196 element_resize_callback_.Reset(isolate, callback);
199 element_resize_isolate_ = isolate; 197 element_resize_isolate_ = isolate;
200 } 198 }
201 199
202 void ExtensionsGuestViewContainer::DidResizeElement(const gfx::Size& old_size, 200 void ExtensionsGuestViewContainer::DidResizeElement(const gfx::Size& old_size,
203 const gfx::Size& new_size) { 201 const gfx::Size& new_size) {
204 // Call the element resize callback, if one is registered. 202 // Call the element resize callback, if one is registered.
205 if (element_resize_callback_.IsEmpty()) 203 if (element_resize_callback_.IsEmpty())
206 return; 204 return;
207 205
208 base::MessageLoop::current()->PostTask( 206 base::MessageLoop::current()->PostTask(
(...skipping 29 matching lines...) Expand all
238 // Handle the callback for the current request with a pending response. 236 // Handle the callback for the current request with a pending response.
239 HandlePendingResponseCallback(message); 237 HandlePendingResponseCallback(message);
240 // Perform the subsequent attach request if one exists. 238 // Perform the subsequent attach request if one exists.
241 PerformPendingRequest(); 239 PerformPendingRequest();
242 } 240 }
243 241
244 void ExtensionsGuestViewContainer::CallElementResizeCallback( 242 void ExtensionsGuestViewContainer::CallElementResizeCallback(
245 const gfx::Size& old_size, 243 const gfx::Size& old_size,
246 const gfx::Size& new_size) { 244 const gfx::Size& new_size) {
247 v8::HandleScope handle_scope(element_resize_isolate_); 245 v8::HandleScope handle_scope(element_resize_isolate_);
248 v8::Handle<v8::Function> callback = 246 v8::Handle<v8::Function> callback = v8::Local<v8::Function>::New(
249 element_resize_callback_.NewHandle(element_resize_isolate_); 247 element_resize_isolate_, element_resize_callback_);
250 v8::Handle<v8::Context> context = callback->CreationContext(); 248 v8::Handle<v8::Context> context = callback->CreationContext();
251 if (context.IsEmpty()) 249 if (context.IsEmpty())
252 return; 250 return;
253 251
254 const int argc = 4; 252 const int argc = 4;
255 v8::Handle<v8::Value> argv[argc] = { 253 v8::Handle<v8::Value> argv[argc] = {
256 v8::Integer::New(element_resize_isolate_, old_size.width()), 254 v8::Integer::New(element_resize_isolate_, old_size.width()),
257 v8::Integer::New(element_resize_isolate_, old_size.height()), 255 v8::Integer::New(element_resize_isolate_, old_size.height()),
258 v8::Integer::New(element_resize_isolate_, new_size.width()), 256 v8::Integer::New(element_resize_isolate_, new_size.width()),
259 v8::Integer::New(element_resize_isolate_, new_size.height())}; 257 v8::Integer::New(element_resize_isolate_, new_size.height())};
(...skipping 19 matching lines...) Expand all
279 } 277 }
280 278
281 void ExtensionsGuestViewContainer::HandlePendingResponseCallback( 279 void ExtensionsGuestViewContainer::HandlePendingResponseCallback(
282 const IPC::Message& message) { 280 const IPC::Message& message) {
283 CHECK(pending_response_.get()); 281 CHECK(pending_response_.get());
284 linked_ptr<Request> pending_response(pending_response_.release()); 282 linked_ptr<Request> pending_response(pending_response_.release());
285 pending_response->HandleResponse(message); 283 pending_response->HandleResponse(message);
286 } 284 }
287 285
288 } // namespace extensions 286 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698