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

Side by Side Diff: chrome/browser/extensions/extension_protocols.cc

Issue 63933003: Moved ExtensionInfoMap and ExtensionsQuotaService to extensions/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comment fix 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 | Annotate | Revision Log
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/extension_protocols.h" 5 #include "chrome/browser/extensions/extension_protocols.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
11 #include "base/file_util.h" 11 #include "base/file_util.h"
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "base/format_macros.h" 13 #include "base/format_macros.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/memory/weak_ptr.h" 15 #include "base/memory/weak_ptr.h"
16 #include "base/message_loop/message_loop.h" 16 #include "base/message_loop/message_loop.h"
17 #include "base/path_service.h" 17 #include "base/path_service.h"
18 #include "base/sha1.h" 18 #include "base/sha1.h"
19 #include "base/strings/string_number_conversions.h" 19 #include "base/strings/string_number_conversions.h"
20 #include "base/strings/string_util.h" 20 #include "base/strings/string_util.h"
21 #include "base/strings/stringprintf.h" 21 #include "base/strings/stringprintf.h"
22 #include "base/strings/utf_string_conversions.h" 22 #include "base/strings/utf_string_conversions.h"
23 #include "base/threading/sequenced_worker_pool.h" 23 #include "base/threading/sequenced_worker_pool.h"
24 #include "base/threading/thread_restrictions.h" 24 #include "base/threading/thread_restrictions.h"
25 #include "build/build_config.h" 25 #include "build/build_config.h"
26 #include "chrome/browser/extensions/extension_info_map.h"
27 #include "chrome/browser/extensions/extension_renderer_state.h" 26 #include "chrome/browser/extensions/extension_renderer_state.h"
28 #include "chrome/browser/extensions/image_loader.h" 27 #include "chrome/browser/extensions/image_loader.h"
29 #include "chrome/common/chrome_paths.h" 28 #include "chrome/common/chrome_paths.h"
30 #include "chrome/common/extensions/csp_handler.h" 29 #include "chrome/common/extensions/csp_handler.h"
31 #include "chrome/common/extensions/extension.h" 30 #include "chrome/common/extensions/extension.h"
32 #include "chrome/common/extensions/manifest_handlers/icons_handler.h" 31 #include "chrome/common/extensions/manifest_handlers/icons_handler.h"
33 #include "chrome/common/extensions/manifest_handlers/shared_module_info.h" 32 #include "chrome/common/extensions/manifest_handlers/shared_module_info.h"
34 #include "chrome/common/extensions/manifest_url_handler.h" 33 #include "chrome/common/extensions/manifest_url_handler.h"
35 #include "chrome/common/extensions/web_accessible_resources_handler.h" 34 #include "chrome/common/extensions/web_accessible_resources_handler.h"
36 #include "chrome/common/extensions/webview_handler.h" 35 #include "chrome/common/extensions/webview_handler.h"
37 #include "chrome/common/url_constants.h" 36 #include "chrome/common/url_constants.h"
38 #include "content/public/browser/browser_thread.h" 37 #include "content/public/browser/browser_thread.h"
39 #include "content/public/browser/resource_request_info.h" 38 #include "content/public/browser/resource_request_info.h"
39 #include "extensions/browser/info_map.h"
40 #include "extensions/common/constants.h" 40 #include "extensions/common/constants.h"
41 #include "extensions/common/extension_resource.h" 41 #include "extensions/common/extension_resource.h"
42 #include "extensions/common/file_util.h" 42 #include "extensions/common/file_util.h"
43 #include "extensions/common/manifest_handlers/background_info.h" 43 #include "extensions/common/manifest_handlers/background_info.h"
44 #include "extensions/common/manifest_handlers/incognito_info.h" 44 #include "extensions/common/manifest_handlers/incognito_info.h"
45 #include "grit/component_extension_resources_map.h" 45 #include "grit/component_extension_resources_map.h"
46 #include "net/base/mime_util.h" 46 #include "net/base/mime_util.h"
47 #include "net/base/net_errors.h" 47 #include "net/base/net_errors.h"
48 #include "net/http/http_request_headers.h" 48 #include "net/http/http_request_headers.h"
49 #include "net/http/http_response_headers.h" 49 #include "net/http/http_response_headers.h"
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 307
308 net::HttpResponseInfo response_info_; 308 net::HttpResponseInfo response_info_;
309 extensions::ExtensionResource resource_; 309 extensions::ExtensionResource resource_;
310 std::string content_security_policy_; 310 std::string content_security_policy_;
311 bool send_cors_header_; 311 bool send_cors_header_;
312 base::WeakPtrFactory<URLRequestExtensionJob> weak_factory_; 312 base::WeakPtrFactory<URLRequestExtensionJob> weak_factory_;
313 }; 313 };
314 314
315 bool ExtensionCanLoadInIncognito(const ResourceRequestInfo* info, 315 bool ExtensionCanLoadInIncognito(const ResourceRequestInfo* info,
316 const std::string& extension_id, 316 const std::string& extension_id,
317 ExtensionInfoMap* extension_info_map) { 317 extensions::InfoMap* extension_info_map) {
318 if (!extension_info_map->IsIncognitoEnabled(extension_id)) 318 if (!extension_info_map->IsIncognitoEnabled(extension_id))
319 return false; 319 return false;
320 320
321 // Only allow incognito toplevel navigations to extension resources in 321 // Only allow incognito toplevel navigations to extension resources in
322 // split mode. In spanning mode, the extension must run in a single process, 322 // split mode. In spanning mode, the extension must run in a single process,
323 // and an incognito tab prevents that. 323 // and an incognito tab prevents that.
324 if (info->GetResourceType() == ResourceType::MAIN_FRAME) { 324 if (info->GetResourceType() == ResourceType::MAIN_FRAME) {
325 const Extension* extension = 325 const Extension* extension =
326 extension_info_map->extensions().GetByID(extension_id); 326 extension_info_map->extensions().GetByID(extension_id);
327 return extension && extensions::IncognitoInfo::IsSplitMode(extension); 327 return extension && extensions::IncognitoInfo::IsSplitMode(extension);
328 } 328 }
329 329
330 return true; 330 return true;
331 } 331 }
332 332
333 // Returns true if an chrome-extension:// resource should be allowed to load. 333 // Returns true if an chrome-extension:// resource should be allowed to load.
334 // TODO(aa): This should be moved into ExtensionResourceRequestPolicy, but we 334 // TODO(aa): This should be moved into ExtensionResourceRequestPolicy, but we
335 // first need to find a way to get CanLoadInIncognito state into the renderers. 335 // first need to find a way to get CanLoadInIncognito state into the renderers.
336 bool AllowExtensionResourceLoad(net::URLRequest* request, 336 bool AllowExtensionResourceLoad(net::URLRequest* request,
337 bool is_incognito, 337 bool is_incognito,
338 const Extension* extension, 338 const Extension* extension,
339 ExtensionInfoMap* extension_info_map) { 339 extensions::InfoMap* extension_info_map) {
340 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); 340 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
341 341
342 // We have seen crashes where info is NULL: crbug.com/52374. 342 // We have seen crashes where info is NULL: crbug.com/52374.
343 if (!info) { 343 if (!info) {
344 LOG(ERROR) << "Allowing load of " << request->url().spec() 344 LOG(ERROR) << "Allowing load of " << request->url().spec()
345 << "from unknown origin. Could not find user data for " 345 << "from unknown origin. Could not find user data for "
346 << "request."; 346 << "request.";
347 return true; 347 return true;
348 } 348 }
349 349
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 DCHECK_EQ(url.host(), extension->id()); 445 DCHECK_EQ(url.host(), extension->id());
446 DCHECK(path.length() > 0 && path[0] == '/'); 446 DCHECK(path.length() > 0 && path[0] == '/');
447 path = path.substr(1); 447 path = path.substr(1);
448 return extensions::IconsInfo::GetIcons(extension).ContainsPath(path); 448 return extensions::IconsInfo::GetIcons(extension).ContainsPath(path);
449 } 449 }
450 450
451 class ExtensionProtocolHandler 451 class ExtensionProtocolHandler
452 : public net::URLRequestJobFactory::ProtocolHandler { 452 : public net::URLRequestJobFactory::ProtocolHandler {
453 public: 453 public:
454 ExtensionProtocolHandler(bool is_incognito, 454 ExtensionProtocolHandler(bool is_incognito,
455 ExtensionInfoMap* extension_info_map) 455 extensions::InfoMap* extension_info_map)
456 : is_incognito_(is_incognito), 456 : is_incognito_(is_incognito), extension_info_map_(extension_info_map) {}
457 extension_info_map_(extension_info_map) {}
458 457
459 virtual ~ExtensionProtocolHandler() {} 458 virtual ~ExtensionProtocolHandler() {}
460 459
461 virtual net::URLRequestJob* MaybeCreateJob( 460 virtual net::URLRequestJob* MaybeCreateJob(
462 net::URLRequest* request, 461 net::URLRequest* request,
463 net::NetworkDelegate* network_delegate) const OVERRIDE; 462 net::NetworkDelegate* network_delegate) const OVERRIDE;
464 463
465 private: 464 private:
466 const bool is_incognito_; 465 const bool is_incognito_;
467 ExtensionInfoMap* const extension_info_map_; 466 extensions::InfoMap* const extension_info_map_;
468 DISALLOW_COPY_AND_ASSIGN(ExtensionProtocolHandler); 467 DISALLOW_COPY_AND_ASSIGN(ExtensionProtocolHandler);
469 }; 468 };
470 469
471 // Creates URLRequestJobs for extension:// URLs. 470 // Creates URLRequestJobs for extension:// URLs.
472 net::URLRequestJob* 471 net::URLRequestJob*
473 ExtensionProtocolHandler::MaybeCreateJob( 472 ExtensionProtocolHandler::MaybeCreateJob(
474 net::URLRequest* request, net::NetworkDelegate* network_delegate) const { 473 net::URLRequest* request, net::NetworkDelegate* network_delegate) const {
475 // chrome-extension://extension-id/resource/path.js 474 // chrome-extension://extension-id/resource/path.js
476 std::string extension_id = request->url().host(); 475 std::string extension_id = request->url().host();
477 const Extension* extension = 476 const Extension* extension =
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 directory_path, 591 directory_path,
593 relative_path, 592 relative_path,
594 content_security_policy, 593 content_security_policy,
595 send_cors_header); 594 send_cors_header);
596 } 595 }
597 596
598 } // namespace 597 } // namespace
599 598
600 net::URLRequestJobFactory::ProtocolHandler* CreateExtensionProtocolHandler( 599 net::URLRequestJobFactory::ProtocolHandler* CreateExtensionProtocolHandler(
601 bool is_incognito, 600 bool is_incognito,
602 ExtensionInfoMap* extension_info_map) { 601 extensions::InfoMap* extension_info_map) {
603 return new ExtensionProtocolHandler(is_incognito, extension_info_map); 602 return new ExtensionProtocolHandler(is_incognito, extension_info_map);
604 } 603 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_protocols.h ('k') | chrome/browser/extensions/extension_protocols_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698