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

Side by Side Diff: chrome/browser/extensions/api/web_request/web_request_permissions.cc

Issue 515563003: Remove dependency of chrome in WebRequestPermissions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months 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 (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/extensions/api/web_request/web_request_permissions.h" 5 #include "chrome/browser/extensions/api/web_request/web_request_permissions.h"
6 6
7 #include "base/strings/string_util.h" 7 #include "base/strings/string_util.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "chrome/common/extensions/extension_constants.h"
10 #include "chrome/common/url_constants.h"
11 #include "content/public/browser/resource_request_info.h" 9 #include "content/public/browser/resource_request_info.h"
10 #include "extensions/browser/api/extensions_api_client.h"
11 #include "extensions/browser/api/web_request/web_request_permissions_delegate.h"
12 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" 12 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h"
13 #include "extensions/browser/info_map.h" 13 #include "extensions/browser/info_map.h"
14 #include "extensions/common/constants.h" 14 #include "extensions/common/constants.h"
15 #include "extensions/common/extension.h" 15 #include "extensions/common/extension.h"
16 #include "extensions/common/permissions/permissions_data.h" 16 #include "extensions/common/permissions/permissions_data.h"
17 #include "net/url_request/url_request.h" 17 #include "net/url_request/url_request.h"
18 #include "url/gurl.h" 18 #include "url/gurl.h"
19 19
20 using content::ResourceRequestInfo; 20 using content::ResourceRequestInfo;
21 21
22 namespace { 22 namespace {
23 23
24 extensions::WebRequestPermissionsDelegate* GetWebRequestPermissionsDelegate() {
Fady Samuel 2014/08/27 21:49:17 This is VERY bad. You're creating a new delegate e
25 return extensions::ExtensionsAPIClient::Get()->
26 CreateWebRequestPermissionsDelegate();
27 }
28
24 // Returns true if the URL is sensitive and requests to this URL must not be 29 // Returns true if the URL is sensitive and requests to this URL must not be
25 // modified/canceled by extensions, e.g. because it is targeted to the webstore 30 // modified/canceled by extensions, e.g. because it is targeted to the webstore
26 // to check for updates, extension blacklisting, etc. 31 // to check for updates, extension blacklisting, etc.
27 bool IsSensitiveURL(const GURL& url) { 32 bool IsSensitiveURL(const GURL& url) {
28 // TODO(battre) Merge this, CanExtensionAccessURL and 33 // TODO(battre) Merge this, CanExtensionAccessURL and
29 // PermissionsData::CanAccessPage into one function. 34 // PermissionsData::CanAccessPage into one function.
30 bool sensitive_chrome_url = false; 35 bool sensitive_chrome_url = false;
31 const std::string host = url.host(); 36 const std::string host = url.host();
32 const char kGoogleCom[] = ".google.com"; 37 const char kGoogleCom[] = ".google.com";
33 const char kClient[] = "clients"; 38 const char kClient[] = "clients";
(...skipping 19 matching lines...) Expand all
53 EndsWith(url.host(), ".clients.google.com", true) || 58 EndsWith(url.host(), ".clients.google.com", true) ||
54 url.host() == "sb-ssl.google.com" || 59 url.host() == "sb-ssl.google.com" ||
55 (url.host() == "chrome.google.com" && 60 (url.host() == "chrome.google.com" &&
56 StartsWithASCII(url.path(), "/webstore", true)); 61 StartsWithASCII(url.path(), "/webstore", true));
57 } 62 }
58 GURL::Replacements replacements; 63 GURL::Replacements replacements;
59 replacements.ClearQuery(); 64 replacements.ClearQuery();
60 replacements.ClearRef(); 65 replacements.ClearRef();
61 GURL url_without_query = url.ReplaceComponents(replacements); 66 GURL url_without_query = url.ReplaceComponents(replacements);
62 return sensitive_chrome_url || 67 return sensitive_chrome_url ||
63 extension_urls::IsWebstoreUpdateUrl(url_without_query) || 68 (GetWebRequestPermissionsDelegate() &&
64 extension_urls::IsBlacklistUpdateUrl(url); 69 GetWebRequestPermissionsDelegate()->IsUpdateURL(url));
Fady Samuel 2014/08/27 21:49:17 Indent off.
65 } 70 }
66 71
67 // Returns true if the scheme is one we want to allow extensions to have access 72 // Returns true if the scheme is one we want to allow extensions to have access
68 // to. Extensions still need specific permissions for a given URL, which is 73 // to. Extensions still need specific permissions for a given URL, which is
69 // covered by CanExtensionAccessURL. 74 // covered by CanExtensionAccessURL.
70 bool HasWebRequestScheme(const GURL& url) { 75 bool HasWebRequestScheme(const GURL& url) {
71 return (url.SchemeIs(url::kAboutScheme) || url.SchemeIs(url::kFileScheme) || 76 return (url.SchemeIs(url::kAboutScheme) || url.SchemeIs(url::kFileScheme) ||
72 url.SchemeIs(url::kFileSystemScheme) || 77 url.SchemeIs(url::kFileSystemScheme) ||
73 url.SchemeIs(url::kFtpScheme) || url.SchemeIs(url::kHttpScheme) || 78 url.SchemeIs(url::kFtpScheme) || url.SchemeIs(url::kHttpScheme) ||
74 url.SchemeIs(url::kHttpsScheme) || 79 url.SchemeIs(url::kHttpsScheme) ||
75 url.SchemeIs(extensions::kExtensionScheme)); 80 url.SchemeIs(extensions::kExtensionScheme));
76 } 81 }
77 82
78 } // namespace 83 } // namespace
79 84
80 // static 85 // static
81 bool WebRequestPermissions::HideRequest( 86 bool WebRequestPermissions::HideRequest(
82 const extensions::InfoMap* extension_info_map, 87 const extensions::InfoMap* extension_info_map,
83 const net::URLRequest* request) { 88 const net::URLRequest* request) {
84 // Hide requests from the Chrome WebStore App or signin process. 89 // Hide requests from the Chrome WebStore App or signin process.
85 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); 90 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
86 if (info) { 91 if (info) {
87 int process_id = info->GetChildID(); 92 int process_id = info->GetChildID();
88 // Never hide requests from guest processes. 93 // Never hide requests from guest processes.
89 if (extensions::WebViewRendererState::GetInstance()->IsGuest(process_id)) 94 if (extensions::WebViewRendererState::GetInstance()->IsGuest(process_id))
90 return false; 95 return false;
91 96
92 if (extension_info_map && ( 97 if (extension_info_map && (
93 extension_info_map->IsSigninProcess(process_id) || 98 extension_info_map->IsSigninProcess(process_id) ||
94 extension_info_map->process_map().Contains( 99 (GetWebRequestPermissionsDelegate() &&
95 extension_misc::kWebStoreAppId, process_id))) { 100 GetWebRequestPermissionsDelegate()->ContainsWebStoreAppId(
Fady Samuel 2014/08/27 21:49:17 Indent off.
101 extension_info_map->process_map(), process_id)))) {
96 return true; 102 return true;
97 } 103 }
98 } 104 }
99 105
100 const GURL& url = request->url(); 106 const GURL& url = request->url();
101 return IsSensitiveURL(url) || !HasWebRequestScheme(url); 107 return IsSensitiveURL(url) || !HasWebRequestScheme(url);
102 } 108 }
103 109
104 // static 110 // static
105 bool WebRequestPermissions::CanExtensionAccessURL( 111 bool WebRequestPermissions::CanExtensionAccessURL(
(...skipping 28 matching lines...) Expand all
134 } 140 }
135 break; 141 break;
136 case REQUIRE_ALL_URLS: 142 case REQUIRE_ALL_URLS:
137 if (!extension->permissions_data()->HasEffectiveAccessToAllHosts()) 143 if (!extension->permissions_data()->HasEffectiveAccessToAllHosts())
138 return false; 144 return false;
139 break; 145 break;
140 } 146 }
141 147
142 return true; 148 return true;
143 } 149 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698