OLD | NEW |
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/browser/guest_view/guest_view_base.h" | 5 #include "extensions/browser/guest_view/guest_view_base.h" |
6 | 6 |
7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "content/public/browser/render_frame_host.h" | 9 #include "content/public/browser/render_frame_host.h" |
10 #include "content/public/browser/render_process_host.h" | 10 #include "content/public/browser/render_process_host.h" |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 delete this; | 150 delete this; |
151 callback.Run(NULL); | 151 callback.Run(NULL); |
152 return; | 152 return; |
153 } | 153 } |
154 | 154 |
155 CreateWebContents(embedder_extension_id, | 155 CreateWebContents(embedder_extension_id, |
156 embedder_process_id, | 156 embedder_process_id, |
157 embedder_site_url, | 157 embedder_site_url, |
158 create_params, | 158 create_params, |
159 base::Bind(&GuestViewBase::CompleteInit, | 159 base::Bind(&GuestViewBase::CompleteInit, |
160 AsWeakPtr(), | 160 weak_ptr_factory_.GetWeakPtr(), |
161 embedder_extension_id, | 161 embedder_extension_id, |
162 embedder_process_id, | 162 embedder_process_id, |
163 callback)); | 163 callback)); |
164 } | 164 } |
165 | 165 |
166 void GuestViewBase::InitWithWebContents( | 166 void GuestViewBase::InitWithWebContents( |
167 const std::string& embedder_extension_id, | 167 const std::string& embedder_extension_id, |
168 int embedder_render_process_id, | 168 int embedder_render_process_id, |
169 content::WebContents* guest_web_contents) { | 169 content::WebContents* guest_web_contents) { |
170 DCHECK(guest_web_contents); | 170 DCHECK(guest_web_contents); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 return NULL; | 263 return NULL; |
264 | 264 |
265 return GuestViewBase::FromWebContents(guest_web_contents); | 265 return GuestViewBase::FromWebContents(guest_web_contents); |
266 } | 266 } |
267 | 267 |
268 // static | 268 // static |
269 bool GuestViewBase::IsGuest(WebContents* web_contents) { | 269 bool GuestViewBase::IsGuest(WebContents* web_contents) { |
270 return !!GuestViewBase::FromWebContents(web_contents); | 270 return !!GuestViewBase::FromWebContents(web_contents); |
271 } | 271 } |
272 | 272 |
273 base::WeakPtr<GuestViewBase> GuestViewBase::AsWeakPtr() { | |
274 return weak_ptr_factory_.GetWeakPtr(); | |
275 } | |
276 | |
277 bool GuestViewBase::IsAutoSizeSupported() const { | 273 bool GuestViewBase::IsAutoSizeSupported() const { |
278 return false; | 274 return false; |
279 } | 275 } |
280 | 276 |
281 bool GuestViewBase::IsDragAndDropEnabled() const { | 277 bool GuestViewBase::IsDragAndDropEnabled() const { |
282 return false; | 278 return false; |
283 } | 279 } |
284 | 280 |
285 void GuestViewBase::RenderProcessExited(content::RenderProcessHost* host, | 281 void GuestViewBase::RenderProcessExited(content::RenderProcessHost* host, |
286 base::ProcessHandle handle, | 282 base::ProcessHandle handle, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size, | 316 void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size, |
321 const gfx::Size& new_size) { | 317 const gfx::Size& new_size) { |
322 if (!auto_size_enabled_) | 318 if (!auto_size_enabled_) |
323 return; | 319 return; |
324 guest_size_ = new_size; | 320 guest_size_ = new_size; |
325 GuestSizeChangedDueToAutoSize(old_size, new_size); | 321 GuestSizeChangedDueToAutoSize(old_size, new_size); |
326 } | 322 } |
327 | 323 |
328 void GuestViewBase::Destroy() { | 324 void GuestViewBase::Destroy() { |
329 DCHECK(web_contents()); | 325 DCHECK(web_contents()); |
| 326 |
330 content::RenderProcessHost* host = | 327 content::RenderProcessHost* host = |
331 content::RenderProcessHost::FromID(embedder_render_process_id()); | 328 content::RenderProcessHost::FromID(embedder_render_process_id()); |
332 if (host) | 329 if (host) |
333 host->RemoveObserver(this); | 330 host->RemoveObserver(this); |
334 | 331 |
335 // Give the derived class an opportunity to perform some cleanup. | 332 // Give the derived class an opportunity to perform some cleanup. |
336 WillDestroy(); | 333 WillDestroy(); |
337 | 334 |
| 335 // Invalidate weak pointers now so that bound callbacks cannot be called late |
| 336 // into destruction. We must call this after WillDestroy because derived types |
| 337 // may wish to access their openers. |
| 338 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 339 |
338 // Give the content module an opportunity to perform some cleanup. | 340 // Give the content module an opportunity to perform some cleanup. |
339 if (!destruction_callback_.is_null()) | 341 if (!destruction_callback_.is_null()) |
340 destruction_callback_.Run(); | 342 destruction_callback_.Run(); |
341 | 343 |
342 webcontents_guestview_map.Get().erase(web_contents()); | 344 webcontents_guestview_map.Get().erase(web_contents()); |
343 GuestViewManager::FromBrowserContext(browser_context_)-> | 345 GuestViewManager::FromBrowserContext(browser_context_)-> |
344 RemoveGuest(guest_instance_id_); | 346 RemoveGuest(guest_instance_id_); |
345 pending_events_.clear(); | 347 pending_events_.clear(); |
346 | 348 |
347 delete web_contents(); | 349 delete web_contents(); |
348 } | 350 } |
349 | 351 |
350 void GuestViewBase::SetAttachParams(const base::DictionaryValue& params) { | 352 void GuestViewBase::SetAttachParams(const base::DictionaryValue& params) { |
351 attach_params_.reset(params.DeepCopy()); | 353 attach_params_.reset(params.DeepCopy()); |
352 attach_params_->GetInteger(guestview::kParameterInstanceId, | 354 attach_params_->GetInteger(guestview::kParameterInstanceId, |
353 &view_instance_id_); | 355 &view_instance_id_); |
354 } | 356 } |
355 | 357 |
356 void GuestViewBase::SetOpener(GuestViewBase* guest) { | 358 void GuestViewBase::SetOpener(GuestViewBase* guest) { |
357 if (guest && guest->IsViewType(GetViewType())) { | 359 if (guest && guest->IsViewType(GetViewType())) { |
358 opener_ = guest->AsWeakPtr(); | 360 opener_ = guest->weak_ptr_factory_.GetWeakPtr(); |
359 return; | 361 return; |
360 } | 362 } |
361 opener_ = base::WeakPtr<GuestViewBase>(); | 363 opener_ = base::WeakPtr<GuestViewBase>(); |
362 } | 364 } |
363 | 365 |
364 void GuestViewBase::RegisterDestructionCallback( | 366 void GuestViewBase::RegisterDestructionCallback( |
365 const DestructionCallback& callback) { | 367 const DestructionCallback& callback) { |
366 destruction_callback_ = callback; | 368 destruction_callback_ = callback; |
367 } | 369 } |
368 | 370 |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 | 506 |
505 // static | 507 // static |
506 void GuestViewBase::RegisterGuestViewTypes() { | 508 void GuestViewBase::RegisterGuestViewTypes() { |
507 AppViewGuest::Register(); | 509 AppViewGuest::Register(); |
508 ExtensionOptionsGuest::Register(); | 510 ExtensionOptionsGuest::Register(); |
509 MimeHandlerViewGuest::Register(); | 511 MimeHandlerViewGuest::Register(); |
510 WebViewGuest::Register(); | 512 WebViewGuest::Register(); |
511 } | 513 } |
512 | 514 |
513 } // namespace extensions | 515 } // namespace extensions |
OLD | NEW |