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

Side by Side Diff: chrome/browser/guestview/webview/webview_guest.cc

Issue 27408004: <webview>: Resolve relative paths as chrome-extension: URLs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactor + addressed creis' comments Created 7 years, 1 month 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/guestview/webview/webview_guest.h" 5 #include "chrome/browser/guestview/webview/webview_guest.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/strings/stringprintf.h"
8 #include "chrome/browser/extensions/api/web_request/web_request_api.h" 9 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
9 #include "chrome/browser/extensions/extension_renderer_state.h" 10 #include "chrome/browser/extensions/extension_renderer_state.h"
10 #include "chrome/browser/extensions/extension_web_contents_observer.h" 11 #include "chrome/browser/extensions/extension_web_contents_observer.h"
11 #include "chrome/browser/extensions/script_executor.h" 12 #include "chrome/browser/extensions/script_executor.h"
12 #include "chrome/browser/favicon/favicon_tab_helper.h" 13 #include "chrome/browser/favicon/favicon_tab_helper.h"
13 #include "chrome/browser/guestview/guestview_constants.h" 14 #include "chrome/browser/guestview/guestview_constants.h"
14 #include "chrome/browser/guestview/webview/webview_constants.h" 15 #include "chrome/browser/guestview/webview/webview_constants.h"
15 #include "chrome/browser/guestview/webview/webview_permission_types.h" 16 #include "chrome/browser/guestview/webview/webview_permission_types.h"
16 #include "chrome/common/chrome_version_info.h" 17 #include "chrome/common/chrome_version_info.h"
17 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/native_web_keyboard_event.h" 19 #include "content/public/browser/native_web_keyboard_event.h"
19 #include "content/public/browser/notification_details.h" 20 #include "content/public/browser/notification_details.h"
20 #include "content/public/browser/notification_source.h" 21 #include "content/public/browser/notification_source.h"
21 #include "content/public/browser/notification_types.h" 22 #include "content/public/browser/notification_types.h"
22 #include "content/public/browser/render_process_host.h" 23 #include "content/public/browser/render_process_host.h"
23 #include "content/public/browser/resource_request_details.h" 24 #include "content/public/browser/resource_request_details.h"
24 #include "content/public/browser/site_instance.h" 25 #include "content/public/browser/site_instance.h"
25 #include "content/public/browser/storage_partition.h" 26 #include "content/public/browser/storage_partition.h"
26 #include "content/public/browser/user_metrics.h" 27 #include "content/public/browser/user_metrics.h"
27 #include "content/public/browser/web_contents.h" 28 #include "content/public/browser/web_contents.h"
28 #include "content/public/common/content_switches.h" 29 #include "content/public/common/content_switches.h"
29 #include "content/public/common/result_codes.h" 30 #include "content/public/common/result_codes.h"
31 #include "extensions/common/constants.h"
30 #include "net/base/net_errors.h" 32 #include "net/base/net_errors.h"
31 33
32 #if defined(ENABLE_PLUGINS) 34 #if defined(ENABLE_PLUGINS)
33 #include "chrome/browser/guestview/webview/plugin_permission_helper.h" 35 #include "chrome/browser/guestview/webview/plugin_permission_helper.h"
34 #endif 36 #endif
35 37
36 using content::WebContents; 38 using content::WebContents;
37 39
38 namespace { 40 namespace {
39 41
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 void AttachWebViewHelpers(WebContents* contents) { 102 void AttachWebViewHelpers(WebContents* contents) {
101 FaviconTabHelper::CreateForWebContents(contents); 103 FaviconTabHelper::CreateForWebContents(contents);
102 extensions::ExtensionWebContentsObserver::CreateForWebContents(contents); 104 extensions::ExtensionWebContentsObserver::CreateForWebContents(contents);
103 #if defined(ENABLE_PLUGINS) 105 #if defined(ENABLE_PLUGINS)
104 PluginPermissionHelper::CreateForWebContents(contents); 106 PluginPermissionHelper::CreateForWebContents(contents);
105 #endif 107 #endif
106 } 108 }
107 109
108 } // namespace 110 } // namespace
109 111
110 WebViewGuest::WebViewGuest(WebContents* guest_web_contents) 112 WebViewGuest::WebViewGuest(WebContents* guest_web_contents,
111 : GuestView(guest_web_contents), 113 const std::string& extension_id)
114 : GuestView(guest_web_contents, extension_id),
112 WebContentsObserver(guest_web_contents), 115 WebContentsObserver(guest_web_contents),
113 script_executor_(new extensions::ScriptExecutor(guest_web_contents, 116 script_executor_(new extensions::ScriptExecutor(guest_web_contents,
114 &script_observers_)), 117 &script_observers_)),
115 next_permission_request_id_(0), 118 next_permission_request_id_(0),
116 is_overriding_user_agent_(false) { 119 is_overriding_user_agent_(false) {
117 notification_registrar_.Add( 120 notification_registrar_.Add(
118 this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 121 this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
119 content::Source<WebContents>(guest_web_contents)); 122 content::Source<WebContents>(guest_web_contents));
120 123
121 notification_registrar_.Add( 124 notification_registrar_.Add(
(...skipping 12 matching lines...) Expand all
134 return guest->AsWebView(); 137 return guest->AsWebView();
135 } 138 }
136 139
137 // static 140 // static
138 WebViewGuest* WebViewGuest::FromWebContents(WebContents* contents) { 141 WebViewGuest* WebViewGuest::FromWebContents(WebContents* contents) {
139 GuestView* guest = GuestView::FromWebContents(contents); 142 GuestView* guest = GuestView::FromWebContents(contents);
140 return guest ? guest->AsWebView() : NULL; 143 return guest ? guest->AsWebView() : NULL;
141 } 144 }
142 145
143 void WebViewGuest::Attach(WebContents* embedder_web_contents, 146 void WebViewGuest::Attach(WebContents* embedder_web_contents,
144 const std::string& extension_id,
145 const base::DictionaryValue& args) { 147 const base::DictionaryValue& args) {
146 std::string user_agent_override; 148 std::string user_agent_override;
147 if (args.GetString(webview::kParameterUserAgentOverride, 149 if (args.GetString(webview::kParameterUserAgentOverride,
148 &user_agent_override)) { 150 &user_agent_override)) {
149 SetUserAgentOverride(user_agent_override); 151 SetUserAgentOverride(user_agent_override);
150 } else { 152 } else {
151 SetUserAgentOverride(""); 153 SetUserAgentOverride("");
152 } 154 }
153 155
154 GuestView::Attach( 156 GuestView::Attach(embedder_web_contents, args);
155 embedder_web_contents, extension_id, args);
156 157
157 AddWebViewToExtensionRendererState(); 158 AddWebViewToExtensionRendererState();
158 } 159 }
159 160
160 GuestView::Type WebViewGuest::GetViewType() const { 161 GuestView::Type WebViewGuest::GetViewType() const {
161 return GuestView::WEBVIEW; 162 return GuestView::WEBVIEW;
162 } 163 }
163 164
164 WebViewGuest* WebViewGuest::AsWebView() { 165 WebViewGuest* WebViewGuest::AsWebView() {
165 return this; 166 return this;
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 WebContents* web_contents) { 546 WebContents* web_contents) {
546 content::BrowserThread::PostTask( 547 content::BrowserThread::PostTask(
547 content::BrowserThread::IO, FROM_HERE, 548 content::BrowserThread::IO, FROM_HERE,
548 base::Bind( 549 base::Bind(
549 &ExtensionRendererState::RemoveWebView, 550 &ExtensionRendererState::RemoveWebView,
550 base::Unretained(ExtensionRendererState::GetInstance()), 551 base::Unretained(ExtensionRendererState::GetInstance()),
551 web_contents->GetRenderProcessHost()->GetID(), 552 web_contents->GetRenderProcessHost()->GetID(),
552 web_contents->GetRoutingID())); 553 web_contents->GetRoutingID()));
553 } 554 }
554 555
556 GURL WebViewGuest::ResolveURL(const std::string& src) {
557 if (extension_id().empty()) {
558 NOTREACHED();
559 return GURL(src);
560 }
561 GURL default_url(base::StringPrintf("%s://%s/",
562 extensions::kExtensionScheme,
563 extension_id().c_str()));
564 return default_url.Resolve(src);
565 }
566
555 void WebViewGuest::SizeChanged(const gfx::Size& old_size, 567 void WebViewGuest::SizeChanged(const gfx::Size& old_size,
556 const gfx::Size& new_size) { 568 const gfx::Size& new_size) {
557 scoped_ptr<DictionaryValue> args(new DictionaryValue()); 569 scoped_ptr<DictionaryValue> args(new DictionaryValue());
558 args->SetInteger(webview::kOldHeight, old_size.height()); 570 args->SetInteger(webview::kOldHeight, old_size.height());
559 args->SetInteger(webview::kOldWidth, old_size.width()); 571 args->SetInteger(webview::kOldWidth, old_size.width());
560 args->SetInteger(webview::kNewHeight, new_size.height()); 572 args->SetInteger(webview::kNewHeight, new_size.height());
561 args->SetInteger(webview::kNewWidth, new_size.width()); 573 args->SetInteger(webview::kNewWidth, new_size.width());
562 DispatchEvent(new GuestView::Event(webview::kEventSizeChanged, args.Pass())); 574 DispatchEvent(new GuestView::Event(webview::kEventSizeChanged, args.Pass()));
563 } 575 }
564 576
565 WebViewGuest::PermissionResponseInfo::PermissionResponseInfo() 577 WebViewGuest::PermissionResponseInfo::PermissionResponseInfo()
566 : allowed_by_default(false) { 578 : allowed_by_default(false) {
567 } 579 }
568 580
569 WebViewGuest::PermissionResponseInfo::PermissionResponseInfo( 581 WebViewGuest::PermissionResponseInfo::PermissionResponseInfo(
570 const PermissionResponseCallback& callback, 582 const PermissionResponseCallback& callback,
571 bool allowed_by_default) 583 bool allowed_by_default)
572 : callback(callback), 584 : callback(callback),
573 allowed_by_default(allowed_by_default) { 585 allowed_by_default(allowed_by_default) {
574 } 586 }
575 587
576 WebViewGuest::PermissionResponseInfo::~PermissionResponseInfo() { 588 WebViewGuest::PermissionResponseInfo::~PermissionResponseInfo() {
577 } 589 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698