| 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 } | 84 } |
| 85 | 85 |
| 86 private: | 86 private: |
| 87 bool destroyed_; | 87 bool destroyed_; |
| 88 GuestViewBase* guest_; | 88 GuestViewBase* guest_; |
| 89 | 89 |
| 90 void Destroy() { | 90 void Destroy() { |
| 91 if (destroyed_) | 91 if (destroyed_) |
| 92 return; | 92 return; |
| 93 destroyed_ = true; | 93 destroyed_ = true; |
| 94 guest_->embedder_web_contents_ = NULL; | 94 guest_->embedder_web_contents_ = nullptr; |
| 95 guest_->EmbedderDestroyed(); | 95 guest_->EmbedderDestroyed(); |
| 96 guest_->Destroy(); | 96 guest_->Destroy(); |
| 97 } | 97 } |
| 98 | 98 |
| 99 DISALLOW_COPY_AND_ASSIGN(EmbedderWebContentsObserver); | 99 DISALLOW_COPY_AND_ASSIGN(EmbedderWebContentsObserver); |
| 100 }; | 100 }; |
| 101 | 101 |
| 102 GuestViewBase::GuestViewBase(content::BrowserContext* browser_context, | 102 GuestViewBase::GuestViewBase(content::BrowserContext* browser_context, |
| 103 int guest_instance_id) | 103 int guest_instance_id) |
| 104 : embedder_web_contents_(NULL), | 104 : embedder_web_contents_(nullptr), |
| 105 embedder_render_process_id_(0), | 105 embedder_render_process_id_(0), |
| 106 browser_context_(browser_context), | 106 browser_context_(browser_context), |
| 107 guest_instance_id_(guest_instance_id), | 107 guest_instance_id_(guest_instance_id), |
| 108 view_instance_id_(guestview::kInstanceIDNone), | 108 view_instance_id_(guestview::kInstanceIDNone), |
| 109 element_instance_id_(guestview::kInstanceIDNone), | 109 element_instance_id_(guestview::kInstanceIDNone), |
| 110 initialized_(false), | 110 initialized_(false), |
| 111 auto_size_enabled_(false), | 111 auto_size_enabled_(false), |
| 112 weak_ptr_factory_(this) { | 112 weak_ptr_factory_(this) { |
| 113 } | 113 } |
| 114 | 114 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 138 | 138 |
| 139 Feature::Availability availability = feature->IsAvailableToContext( | 139 Feature::Availability availability = feature->IsAvailableToContext( |
| 140 embedder_extension, | 140 embedder_extension, |
| 141 process_map->GetMostLikelyContextType(embedder_extension, | 141 process_map->GetMostLikelyContextType(embedder_extension, |
| 142 embedder_process_id), | 142 embedder_process_id), |
| 143 embedder_web_contents->GetLastCommittedURL()); | 143 embedder_web_contents->GetLastCommittedURL()); |
| 144 if (!availability.is_available()) { | 144 if (!availability.is_available()) { |
| 145 // The derived class did not create a WebContents so this class serves no | 145 // The derived class did not create a WebContents so this class serves no |
| 146 // purpose. Let's self-destruct. | 146 // purpose. Let's self-destruct. |
| 147 delete this; | 147 delete this; |
| 148 callback.Run(NULL); | 148 callback.Run(nullptr); |
| 149 return; | 149 return; |
| 150 } | 150 } |
| 151 | 151 |
| 152 CreateWebContents(embedder_extension_id, | 152 CreateWebContents(embedder_extension_id, |
| 153 embedder_process_id, | 153 embedder_process_id, |
| 154 create_params, | 154 create_params, |
| 155 base::Bind(&GuestViewBase::CompleteInit, | 155 base::Bind(&GuestViewBase::CompleteInit, |
| 156 AsWeakPtr(), | 156 AsWeakPtr(), |
| 157 embedder_extension_id, | 157 embedder_extension_id, |
| 158 embedder_process_id, | 158 embedder_process_id, |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 content::BrowserContext* browser_context, | 225 content::BrowserContext* browser_context, |
| 226 int guest_instance_id, | 226 int guest_instance_id, |
| 227 const std::string& view_type) { | 227 const std::string& view_type) { |
| 228 if (guest_view_registry.Get().empty()) | 228 if (guest_view_registry.Get().empty()) |
| 229 RegisterGuestViewTypes(); | 229 RegisterGuestViewTypes(); |
| 230 | 230 |
| 231 GuestViewCreationMap::iterator it = | 231 GuestViewCreationMap::iterator it = |
| 232 guest_view_registry.Get().find(view_type); | 232 guest_view_registry.Get().find(view_type); |
| 233 if (it == guest_view_registry.Get().end()) { | 233 if (it == guest_view_registry.Get().end()) { |
| 234 NOTREACHED(); | 234 NOTREACHED(); |
| 235 return NULL; | 235 return nullptr; |
| 236 } | 236 } |
| 237 return it->second.Run(browser_context, guest_instance_id); | 237 return it->second.Run(browser_context, guest_instance_id); |
| 238 } | 238 } |
| 239 | 239 |
| 240 // static | 240 // static |
| 241 GuestViewBase* GuestViewBase::FromWebContents(WebContents* web_contents) { | 241 GuestViewBase* GuestViewBase::FromWebContents(WebContents* web_contents) { |
| 242 WebContentsGuestViewMap* guest_map = webcontents_guestview_map.Pointer(); | 242 WebContentsGuestViewMap* guest_map = webcontents_guestview_map.Pointer(); |
| 243 WebContentsGuestViewMap::iterator it = guest_map->find(web_contents); | 243 WebContentsGuestViewMap::iterator it = guest_map->find(web_contents); |
| 244 return it == guest_map->end() ? NULL : it->second; | 244 return it == guest_map->end() ? nullptr : it->second; |
| 245 } | 245 } |
| 246 | 246 |
| 247 // static | 247 // static |
| 248 GuestViewBase* GuestViewBase::From(int embedder_process_id, | 248 GuestViewBase* GuestViewBase::From(int embedder_process_id, |
| 249 int guest_instance_id) { | 249 int guest_instance_id) { |
| 250 content::RenderProcessHost* host = | 250 content::RenderProcessHost* host = |
| 251 content::RenderProcessHost::FromID(embedder_process_id); | 251 content::RenderProcessHost::FromID(embedder_process_id); |
| 252 if (!host) | 252 if (!host) |
| 253 return NULL; | 253 return nullptr; |
| 254 | 254 |
| 255 content::WebContents* guest_web_contents = | 255 content::WebContents* guest_web_contents = |
| 256 GuestViewManager::FromBrowserContext(host->GetBrowserContext())-> | 256 GuestViewManager::FromBrowserContext(host->GetBrowserContext())-> |
| 257 GetGuestByInstanceIDSafely(guest_instance_id, embedder_process_id); | 257 GetGuestByInstanceIDSafely(guest_instance_id, embedder_process_id); |
| 258 if (!guest_web_contents) | 258 if (!guest_web_contents) |
| 259 return NULL; | 259 return nullptr; |
| 260 | 260 |
| 261 return GuestViewBase::FromWebContents(guest_web_contents); | 261 return GuestViewBase::FromWebContents(guest_web_contents); |
| 262 } | 262 } |
| 263 | 263 |
| 264 // static | 264 // static |
| 265 bool GuestViewBase::IsGuest(WebContents* web_contents) { | 265 bool GuestViewBase::IsGuest(WebContents* web_contents) { |
| 266 return !!GuestViewBase::FromWebContents(web_contents); | 266 return !!GuestViewBase::FromWebContents(web_contents); |
| 267 } | 267 } |
| 268 | 268 |
| 269 base::WeakPtr<GuestViewBase> GuestViewBase::AsWeakPtr() { | 269 base::WeakPtr<GuestViewBase> GuestViewBase::AsWeakPtr() { |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 } | 471 } |
| 472 | 472 |
| 473 void GuestViewBase::CompleteInit(const std::string& embedder_extension_id, | 473 void GuestViewBase::CompleteInit(const std::string& embedder_extension_id, |
| 474 int embedder_render_process_id, | 474 int embedder_render_process_id, |
| 475 const WebContentsCreatedCallback& callback, | 475 const WebContentsCreatedCallback& callback, |
| 476 content::WebContents* guest_web_contents) { | 476 content::WebContents* guest_web_contents) { |
| 477 if (!guest_web_contents) { | 477 if (!guest_web_contents) { |
| 478 // The derived class did not create a WebContents so this class serves no | 478 // The derived class did not create a WebContents so this class serves no |
| 479 // purpose. Let's self-destruct. | 479 // purpose. Let's self-destruct. |
| 480 delete this; | 480 delete this; |
| 481 callback.Run(NULL); | 481 callback.Run(nullptr); |
| 482 return; | 482 return; |
| 483 } | 483 } |
| 484 InitWithWebContents(embedder_extension_id, | 484 InitWithWebContents(embedder_extension_id, |
| 485 embedder_render_process_id, | 485 embedder_render_process_id, |
| 486 guest_web_contents); | 486 guest_web_contents); |
| 487 callback.Run(guest_web_contents); | 487 callback.Run(guest_web_contents); |
| 488 } | 488 } |
| 489 | 489 |
| 490 // static | 490 // static |
| 491 void GuestViewBase::RegisterGuestViewTypes() { | 491 void GuestViewBase::RegisterGuestViewTypes() { |
| 492 AppViewGuest::Register(); | 492 AppViewGuest::Register(); |
| 493 ExtensionOptionsGuest::Register(); | 493 ExtensionOptionsGuest::Register(); |
| 494 MimeHandlerViewGuest::Register(); | 494 MimeHandlerViewGuest::Register(); |
| 495 WebViewGuest::Register(); | 495 WebViewGuest::Register(); |
| 496 } | 496 } |
| 497 | 497 |
| 498 } // namespace extensions | 498 } // namespace extensions |
| OLD | NEW |