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/web_view/web_view_guest.h" | 5 #include "extensions/browser/guest_view/web_view/web_view_guest.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "content/public/browser/browser_context.h" | 10 #include "content/public/browser/browser_context.h" |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 | 209 |
210 // static | 210 // static |
211 int WebViewGuest::GetViewInstanceId(WebContents* contents) { | 211 int WebViewGuest::GetViewInstanceId(WebContents* contents) { |
212 auto guest = FromWebContents(contents); | 212 auto guest = FromWebContents(contents); |
213 if (!guest) | 213 if (!guest) |
214 return guestview::kInstanceIDNone; | 214 return guestview::kInstanceIDNone; |
215 | 215 |
216 return guest->view_instance_id(); | 216 return guest->view_instance_id(); |
217 } | 217 } |
218 | 218 |
219 const char* WebViewGuest::GetAPINamespace() const { | 219 bool WebViewGuest::CanRunInDetachedState() const { |
220 return webview::kAPINamespace; | 220 return true; |
221 } | |
222 | |
223 int WebViewGuest::GetTaskPrefix() const { | |
224 return IDS_EXTENSION_TASK_MANAGER_WEBVIEW_TAG_PREFIX; | |
225 } | 221 } |
226 | 222 |
227 void WebViewGuest::CreateWebContents( | 223 void WebViewGuest::CreateWebContents( |
228 const base::DictionaryValue& create_params, | 224 const base::DictionaryValue& create_params, |
229 const WebContentsCreatedCallback& callback) { | 225 const WebContentsCreatedCallback& callback) { |
230 content::RenderProcessHost* owner_render_process_host = | 226 content::RenderProcessHost* owner_render_process_host = |
231 owner_web_contents()->GetRenderProcessHost(); | 227 owner_web_contents()->GetRenderProcessHost(); |
232 std::string storage_partition_id; | 228 std::string storage_partition_id; |
233 bool persist_storage = false; | 229 bool persist_storage = false; |
234 ParsePartitionParam(create_params, &storage_partition_id, &persist_storage); | 230 ParsePartitionParam(create_params, &storage_partition_id, &persist_storage); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 | 292 |
297 rules_registry_id_ = GetOrGenerateRulesRegistryID( | 293 rules_registry_id_ = GetOrGenerateRulesRegistryID( |
298 owner_web_contents()->GetRenderProcessHost()->GetID(), | 294 owner_web_contents()->GetRenderProcessHost()->GetID(), |
299 view_instance_id()); | 295 view_instance_id()); |
300 | 296 |
301 // We must install the mapping from guests to WebViews prior to resuming | 297 // We must install the mapping from guests to WebViews prior to resuming |
302 // suspended resource loads so that the WebRequest API will catch resource | 298 // suspended resource loads so that the WebRequest API will catch resource |
303 // requests. | 299 // requests. |
304 PushWebViewStateToIOThread(); | 300 PushWebViewStateToIOThread(); |
305 | 301 |
306 // TODO(fsamuel): Once <webview> can run in a detached state, call | 302 ApplyAttributes(create_params); |
307 // ApplyAttributes here. | |
308 } | 303 } |
309 | 304 |
310 void WebViewGuest::AttachWebViewHelpers(WebContents* contents) { | 305 void WebViewGuest::AttachWebViewHelpers(WebContents* contents) { |
311 if (web_view_guest_delegate_) | 306 if (web_view_guest_delegate_) |
312 web_view_guest_delegate_->OnAttachWebViewHelpers(contents); | 307 web_view_guest_delegate_->OnAttachWebViewHelpers(contents); |
313 web_view_permission_helper_.reset(new WebViewPermissionHelper(this)); | 308 web_view_permission_helper_.reset(new WebViewPermissionHelper(this)); |
314 } | 309 } |
315 | 310 |
316 void WebViewGuest::DidStopLoading() { | 311 void WebViewGuest::DidStopLoading() { |
317 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 312 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
(...skipping 13 matching lines...) Expand all Loading... |
331 content::BrowserThread::IO, | 326 content::BrowserThread::IO, |
332 FROM_HERE, | 327 FROM_HERE, |
333 base::Bind( | 328 base::Bind( |
334 &RemoveWebViewEventListenersOnIOThread, | 329 &RemoveWebViewEventListenersOnIOThread, |
335 browser_context(), | 330 browser_context(), |
336 owner_extension_id(), | 331 owner_extension_id(), |
337 owner_web_contents()->GetRenderProcessHost()->GetID(), | 332 owner_web_contents()->GetRenderProcessHost()->GetID(), |
338 view_instance_id())); | 333 view_instance_id())); |
339 } | 334 } |
340 | 335 |
| 336 const char* WebViewGuest::GetAPINamespace() const { |
| 337 return webview::kAPINamespace; |
| 338 } |
| 339 |
| 340 int WebViewGuest::GetTaskPrefix() const { |
| 341 return IDS_EXTENSION_TASK_MANAGER_WEBVIEW_TAG_PREFIX; |
| 342 } |
| 343 |
341 void WebViewGuest::GuestDestroyed() { | 344 void WebViewGuest::GuestDestroyed() { |
342 // Clean up custom context menu items for this guest. | 345 // Clean up custom context menu items for this guest. |
343 if (web_view_guest_delegate_) | 346 if (web_view_guest_delegate_) |
344 web_view_guest_delegate_->OnGuestDestroyed(); | 347 web_view_guest_delegate_->OnGuestDestroyed(); |
345 RemoveWebViewStateFromIOThread(web_contents()); | 348 RemoveWebViewStateFromIOThread(web_contents()); |
346 } | 349 } |
347 | 350 |
348 void WebViewGuest::GuestReady() { | 351 void WebViewGuest::GuestReady() { |
349 // The guest RenderView should always live in an isolated guest process. | 352 // The guest RenderView should always live in an isolated guest process. |
350 CHECK(web_contents()->GetRenderProcessHost()->IsIsolatedGuest()); | 353 CHECK(web_contents()->GetRenderProcessHost()->IsIsolatedGuest()); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 const std::string& name) { | 477 const std::string& name) { |
475 if (!is_top_level) | 478 if (!is_top_level) |
476 return; | 479 return; |
477 | 480 |
478 if (name_ == name) | 481 if (name_ == name) |
479 return; | 482 return; |
480 | 483 |
481 ReportFrameNameChange(name); | 484 ReportFrameNameChange(name); |
482 } | 485 } |
483 | 486 |
484 bool WebViewGuest::CanRunInDetachedState() const { | |
485 return false; | |
486 } | |
487 | |
488 void WebViewGuest::CreateNewGuestWebViewWindow( | 487 void WebViewGuest::CreateNewGuestWebViewWindow( |
489 const content::OpenURLParams& params) { | 488 const content::OpenURLParams& params) { |
490 GuestViewManager* guest_manager = | 489 GuestViewManager* guest_manager = |
491 GuestViewManager::FromBrowserContext(browser_context()); | 490 GuestViewManager::FromBrowserContext(browser_context()); |
492 // Set the attach params to use the same partition as the opener. | 491 // Set the attach params to use the same partition as the opener. |
493 // We pull the partition information from the site's URL, which is of the | 492 // We pull the partition information from the site's URL, which is of the |
494 // form guest://site/{persist}?{partition_name}. | 493 // form guest://site/{persist}?{partition_name}. |
495 const GURL& site_url = web_contents()->GetSiteInstance()->GetSiteURL(); | 494 const GURL& site_url = web_contents()->GetSiteInstance()->GetSiteURL(); |
496 const std::string storage_partition_id = | 495 const std::string storage_partition_id = |
497 GetStoragePartitionIdFromSiteURL(site_url); | 496 GetStoragePartitionIdFromSiteURL(site_url); |
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1236 WebViewGuest::From(owner_web_contents()->GetRenderProcessHost()->GetID(), | 1235 WebViewGuest::From(owner_web_contents()->GetRenderProcessHost()->GetID(), |
1237 new_window_instance_id); | 1236 new_window_instance_id); |
1238 if (!guest) | 1237 if (!guest) |
1239 return; | 1238 return; |
1240 | 1239 |
1241 if (!allow) | 1240 if (!allow) |
1242 guest->Destroy(); | 1241 guest->Destroy(); |
1243 } | 1242 } |
1244 | 1243 |
1245 } // namespace extensions | 1244 } // namespace extensions |
OLD | NEW |