Chromium Code Reviews| 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 "chrome/browser/chrome_content_browser_client.h" | 5 #include "chrome/browser/chrome_content_browser_client.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 805 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 816 CHECK(can_be_default || !partition_domain->empty()); | 816 CHECK(can_be_default || !partition_domain->empty()); |
| 817 } | 817 } |
| 818 | 818 |
| 819 content::WebContentsViewDelegate* | 819 content::WebContentsViewDelegate* |
| 820 ChromeContentBrowserClient::GetWebContentsViewDelegate( | 820 ChromeContentBrowserClient::GetWebContentsViewDelegate( |
| 821 content::WebContents* web_contents) { | 821 content::WebContents* web_contents) { |
| 822 return chrome::CreateWebContentsViewDelegate(web_contents); | 822 return chrome::CreateWebContentsViewDelegate(web_contents); |
| 823 } | 823 } |
| 824 | 824 |
| 825 void ChromeContentBrowserClient::GuestWebContentsCreated( | 825 void ChromeContentBrowserClient::GuestWebContentsCreated( |
| 826 SiteInstance* guest_site_instance, | |
|
Charlie Reis
2013/10/30 20:42:20
Is this equal to guest_web_contents->GetSiteInstan
Fady Samuel
2013/10/31 17:25:17
Yes, but GuestWebContentsCreated gets called prior
| |
| 826 WebContents* guest_web_contents, | 827 WebContents* guest_web_contents, |
| 827 WebContents* opener_web_contents, | 828 WebContents* opener_web_contents, |
| 828 content::BrowserPluginGuestDelegate** guest_delegate, | 829 content::BrowserPluginGuestDelegate** guest_delegate, |
| 829 scoped_ptr<base::DictionaryValue> extra_params) { | 830 scoped_ptr<base::DictionaryValue> extra_params) { |
| 831 if (!guest_site_instance) { | |
| 832 NOTREACHED(); | |
| 833 return; | |
| 834 } | |
| 835 GURL guest_site_url = guest_site_instance->GetSiteURL(); | |
| 836 const std::string& extension_id = guest_site_url.host(); | |
|
Charlie Reis
2013/10/30 20:42:20
I've lost track-- are we guaranteeing that the gue
Fady Samuel
2013/10/31 17:25:17
For WebUI, this will be extracted from the iframe'
| |
| 837 | |
| 830 if (opener_web_contents) { | 838 if (opener_web_contents) { |
| 831 GuestView* guest = GuestView::FromWebContents(opener_web_contents); | 839 GuestView* guest = GuestView::FromWebContents(opener_web_contents); |
| 832 if (!guest) { | 840 if (!guest) { |
| 833 NOTREACHED(); | 841 NOTREACHED(); |
| 834 return; | 842 return; |
| 835 } | 843 } |
| 836 | 844 |
| 837 // Create a new GuestView of the same type as the opener. | 845 // Create a new GuestView of the same type as the opener. |
| 838 *guest_delegate = | 846 *guest_delegate = |
| 839 GuestView::Create(guest_web_contents, guest->GetViewType()); | 847 GuestView::Create(guest_web_contents, |
| 848 extension_id, | |
| 849 guest->GetViewType()); | |
| 840 return; | 850 return; |
| 841 } | 851 } |
| 842 | 852 |
| 843 if (!extra_params) { | 853 if (!extra_params) { |
| 844 NOTREACHED(); | 854 NOTREACHED(); |
| 845 return; | 855 return; |
| 846 } | 856 } |
| 847 std::string api_type; | 857 std::string api_type; |
| 848 extra_params->GetString(guestview::kParameterApi, &api_type); | 858 extra_params->GetString(guestview::kParameterApi, &api_type); |
| 849 | 859 |
| 860 if (api_type.empty()) | |
| 861 return; | |
| 862 | |
| 850 *guest_delegate = | 863 *guest_delegate = |
| 851 GuestView::Create(guest_web_contents, | 864 GuestView::Create(guest_web_contents, |
| 865 extension_id, | |
| 852 GuestView::GetViewTypeFromString(api_type)); | 866 GuestView::GetViewTypeFromString(api_type)); |
| 853 } | 867 } |
| 854 | 868 |
| 855 void ChromeContentBrowserClient::GuestWebContentsAttached( | 869 void ChromeContentBrowserClient::GuestWebContentsAttached( |
| 856 WebContents* guest_web_contents, | 870 WebContents* guest_web_contents, |
| 857 WebContents* embedder_web_contents, | 871 WebContents* embedder_web_contents, |
| 858 const GURL& embedder_frame_url, | |
| 859 const base::DictionaryValue& extra_params) { | 872 const base::DictionaryValue& extra_params) { |
| 860 Profile* profile = Profile::FromBrowserContext( | |
| 861 embedder_web_contents->GetBrowserContext()); | |
| 862 ExtensionService* service = | |
| 863 extensions::ExtensionSystem::Get(profile)->extension_service(); | |
| 864 if (!service) { | |
| 865 NOTREACHED(); | |
| 866 return; | |
| 867 } | |
| 868 | 873 |
| 869 // We usually require BrowserPlugins to be hosted by a storage isolated | 874 GuestView* guest = GuestView::FromWebContents(guest_web_contents); |
| 870 // extension. We treat WebUI pages as a special case if they host the | 875 if (!guest) { |
| 871 // BrowserPlugin in a component extension iframe. In that case, we use the | |
| 872 // iframe's URL to determine the extension. | |
|
Charlie Reis
2013/10/30 20:42:20
I haven't been able to figure out why it's safe to
Fady Samuel
2013/10/31 17:25:17
See BrowserPluginGuestManager::CreateGuest. This i
| |
| 873 const GURL& embedder_site_url = | |
| 874 embedder_web_contents->GetSiteInstance()->GetSiteURL(); | |
| 875 const Extension* extension = service->extensions()->GetExtensionOrAppByURL( | |
| 876 content::HasWebUIScheme(embedder_site_url) ? | |
| 877 embedder_frame_url : embedder_site_url); | |
| 878 if (!extension) { | |
| 879 // It's ok to return here, since we could be running a browser plugin | 876 // It's ok to return here, since we could be running a browser plugin |
| 880 // outside an extension, and don't need to attach a | 877 // outside an extension, and don't need to attach a |
| 881 // BrowserPluginGuestDelegate in that case; | 878 // BrowserPluginGuestDelegate in that case; |
| 882 // e.g. running with flag --enable-browser-plugin-for-all-view-types. | 879 // e.g. running with flag --enable-browser-plugin-for-all-view-types. |
| 883 return; | 880 return; |
| 884 } | 881 } |
| 885 | 882 guest->Attach(embedder_web_contents, extra_params); |
| 886 GuestView* guest = GuestView::FromWebContents(guest_web_contents); | |
| 887 if (!guest) { | |
| 888 NOTREACHED(); | |
| 889 return; | |
| 890 } | |
| 891 guest->Attach(embedder_web_contents, extension->id(), extra_params); | |
| 892 } | 883 } |
| 893 | 884 |
| 894 void ChromeContentBrowserClient::RenderProcessHostCreated( | 885 void ChromeContentBrowserClient::RenderProcessHostCreated( |
| 895 content::RenderProcessHost* host) { | 886 content::RenderProcessHost* host) { |
| 896 int id = host->GetID(); | 887 int id = host->GetID(); |
| 897 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); | 888 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); |
| 898 net::URLRequestContextGetter* context = | 889 net::URLRequestContextGetter* context = |
| 899 profile->GetRequestContextForRenderProcess(id); | 890 profile->GetRequestContextForRenderProcess(id); |
| 900 | 891 |
| 901 host->AddFilter(new ChromeRenderMessageFilter(id, profile, context)); | 892 host->AddFilter(new ChromeRenderMessageFilter(id, profile, context)); |
| (...skipping 1734 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2636 return IsExtensionOrSharedModuleWhitelisted(url, extension_set, | 2627 return IsExtensionOrSharedModuleWhitelisted(url, extension_set, |
| 2637 allowed_file_handle_origins_) || | 2628 allowed_file_handle_origins_) || |
| 2638 IsHostAllowedByCommandLine(url, extension_set, | 2629 IsHostAllowedByCommandLine(url, extension_set, |
| 2639 switches::kAllowNaClFileHandleAPI); | 2630 switches::kAllowNaClFileHandleAPI); |
| 2640 #else | 2631 #else |
| 2641 return false; | 2632 return false; |
| 2642 #endif | 2633 #endif |
| 2643 } | 2634 } |
| 2644 | 2635 |
| 2645 } // namespace chrome | 2636 } // namespace chrome |
| OLD | NEW |