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

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

Issue 2814009: Move the bookmark manager into resources.pak. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: const Created 10 years, 6 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
« no previous file with comments | « app/resource_bundle_win.cc ('k') | chrome/browser/resources/bookmark_manager_resources.grd » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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>
8
9 #include "app/resource_bundle.h"
10 #include "base/file_path.h"
11 #include "base/logging.h"
12 #include "base/message_loop.h"
13 #include "base/path_service.h"
7 #include "base/string_util.h" 14 #include "base/string_util.h"
8 #include "chrome/browser/net/chrome_url_request_context.h" 15 #include "chrome/browser/net/chrome_url_request_context.h"
9 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" 16 #include "chrome/browser/renderer_host/resource_dispatcher_host.h"
10 #include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h" 17 #include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h"
18 #include "chrome/common/chrome_paths.h"
11 #include "chrome/common/extensions/extension.h" 19 #include "chrome/common/extensions/extension.h"
12 #include "chrome/common/extensions/extension_file_util.h" 20 #include "chrome/common/extensions/extension_file_util.h"
13 #include "chrome/common/extensions/extension_resource.h" 21 #include "chrome/common/extensions/extension_resource.h"
14 #include "chrome/common/url_constants.h" 22 #include "chrome/common/url_constants.h"
15 #include "googleurl/src/url_util.h" 23 #include "googleurl/src/url_util.h"
24 #include "grit/bookmark_manager_resources_map.h"
25 #include "net/base/mime_util.h"
16 #include "net/base/net_errors.h" 26 #include "net/base/net_errors.h"
27 #include "net/url_request/url_request_error_job.h"
17 #include "net/url_request/url_request_file_job.h" 28 #include "net/url_request/url_request_file_job.h"
18 #include "net/url_request/url_request_error_job.h" 29 #include "net/url_request/url_request_simple_job.h"
30
31 namespace {
32
33 class URLRequestResourceBundleJob : public URLRequestSimpleJob {
34 public:
35 explicit URLRequestResourceBundleJob(URLRequest* request,
36 const FilePath& filename, int resource_id)
37 : URLRequestSimpleJob(request),
38 filename_(filename),
39 resource_id_(resource_id) { }
40
41 // URLRequestSimpleJob method.
42 virtual bool GetData(std::string* mime_type,
43 std::string* charset,
44 std::string* data) const {
45 const ResourceBundle& rb = ResourceBundle::GetSharedInstance();
46 *data = rb.GetRawDataResource(resource_id_).as_string();
47 bool result = net::GetMimeTypeFromFile(filename_, mime_type);
48 if (StartsWithASCII(*mime_type, "text/", false)) {
49 // All of our HTML files should be UTF-8 and for other resource types
50 // (like images), charset doesn't matter.
51 DCHECK(IsStringUTF8(*data));
52 *charset = "utf-8";
53 }
54 return result;
55 }
56
57 private:
58 virtual ~URLRequestResourceBundleJob() { }
59
60 // We need the filename of the resource to determine the mime type.
61 FilePath filename_;
62
63 // The resource bundle id to load.
64 int resource_id_;
65 };
66
67 } // namespace
19 68
20 // Factory registered with URLRequest to create URLRequestJobs for extension:// 69 // Factory registered with URLRequest to create URLRequestJobs for extension://
21 // URLs. 70 // URLs.
22 static URLRequestJob* CreateExtensionURLRequestJob(URLRequest* request, 71 static URLRequestJob* CreateExtensionURLRequestJob(URLRequest* request,
23 const std::string& scheme) { 72 const std::string& scheme) {
24 ChromeURLRequestContext* context = 73 ChromeURLRequestContext* context =
25 static_cast<ChromeURLRequestContext*>(request->context()); 74 static_cast<ChromeURLRequestContext*>(request->context());
26 75
27 // Don't allow toplevel navigations to extension resources in incognito mode. 76 // Don't allow toplevel navigations to extension resources in incognito mode.
28 // This is because an extension must run in a single process, and an incognito 77 // This is because an extension must run in a single process, and an incognito
29 // tab prevents that. 78 // tab prevents that.
30 // TODO(mpcomplete): better error code. 79 // TODO(mpcomplete): better error code.
31 const ResourceDispatcherHostRequestInfo* info = 80 const ResourceDispatcherHostRequestInfo* info =
32 ResourceDispatcherHost::InfoForRequest(request); 81 ResourceDispatcherHost::InfoForRequest(request);
33 if (context->is_off_the_record() && 82 if (context->is_off_the_record() &&
34 info && info->resource_type() == ResourceType::MAIN_FRAME) 83 info && info->resource_type() == ResourceType::MAIN_FRAME)
35 return new URLRequestErrorJob(request, net::ERR_ADDRESS_UNREACHABLE); 84 return new URLRequestErrorJob(request, net::ERR_ADDRESS_UNREACHABLE);
36 85
37 // chrome-extension://extension-id/resource/path.js 86 // chrome-extension://extension-id/resource/path.js
38 FilePath directory_path = context->GetPathForExtension(request->url().host()); 87 FilePath directory_path = context->GetPathForExtension(request->url().host());
39 if (directory_path.value().empty()) { 88 if (directory_path.value().empty()) {
40 LOG(WARNING) << "Failed to GetPathForExtension: " << request->url().host(); 89 LOG(WARNING) << "Failed to GetPathForExtension: " << request->url().host();
41 return NULL; 90 return NULL;
42 } 91 }
43 92
93 FilePath resources_path;
94 if (PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_path) &&
95 directory_path.DirName() == resources_path.RemoveExtension()) {
96 FilePath relative_path = directory_path.BaseName().Append(
97 extension_file_util::ExtensionURLToRelativeFilePath(request->url()));
98
99 // TODO(tc): Make a map of FilePath -> resource ids so we don't have to
100 // covert to FilePaths all the time. This will be more useful as we add
101 // more resources.
102 for (size_t i = 0; i < kBookmarkManagerResourcesSize; ++i) {
103 FilePath bm_resource_path =
104 FilePath().AppendASCII(kBookmarkManagerResources[i].name);
105 if (relative_path == bm_resource_path) {
106 return new URLRequestResourceBundleJob(request, relative_path,
107 kBookmarkManagerResources[i].value);
108 }
109 }
110 }
111 // TODO(tc): Move all of these files into resources.pak so we don't break
112 // when updating on Linux.
44 ExtensionResource resource(directory_path, 113 ExtensionResource resource(directory_path,
45 extension_file_util::ExtensionURLToRelativeFilePath(request->url())); 114 extension_file_util::ExtensionURLToRelativeFilePath(request->url()));
46 115
47 return new URLRequestFileJob(request, 116 return new URLRequestFileJob(request,
48 resource.GetFilePathOnAnyThreadHack()); 117 resource.GetFilePathOnAnyThreadHack());
49 } 118 }
50 119
51 // Factory registered with URLRequest to create URLRequestJobs for 120 // Factory registered with URLRequest to create URLRequestJobs for
52 // chrome-user-script:/ URLs. 121 // chrome-user-script:/ URLs.
53 static URLRequestJob* CreateUserScriptURLRequestJob(URLRequest* request, 122 static URLRequestJob* CreateUserScriptURLRequestJob(URLRequest* request,
54 const std::string& scheme) { 123 const std::string& scheme) {
55 ChromeURLRequestContext* context = 124 ChromeURLRequestContext* context =
56 static_cast<ChromeURLRequestContext*>(request->context()); 125 static_cast<ChromeURLRequestContext*>(request->context());
57 126
58 // chrome-user-script:/user-script-name.user.js 127 // chrome-user-script:/user-script-name.user.js
59 FilePath directory_path = context->user_script_dir_path(); 128 FilePath directory_path = context->user_script_dir_path();
60 129
61 ExtensionResource resource(directory_path, 130 ExtensionResource resource(directory_path,
62 extension_file_util::ExtensionURLToRelativeFilePath(request->url())); 131 extension_file_util::ExtensionURLToRelativeFilePath(request->url()));
63 132
64 return new URLRequestFileJob(request, resource.GetFilePath()); 133 return new URLRequestFileJob(request, resource.GetFilePath());
65 } 134 }
66 135
67 void RegisterExtensionProtocols() { 136 void RegisterExtensionProtocols() {
68 URLRequest::RegisterProtocolFactory(chrome::kExtensionScheme, 137 URLRequest::RegisterProtocolFactory(chrome::kExtensionScheme,
69 &CreateExtensionURLRequestJob); 138 &CreateExtensionURLRequestJob);
70 URLRequest::RegisterProtocolFactory(chrome::kUserScriptScheme, 139 URLRequest::RegisterProtocolFactory(chrome::kUserScriptScheme,
71 &CreateUserScriptURLRequestJob); 140 &CreateUserScriptURLRequestJob);
72 } 141 }
OLDNEW
« no previous file with comments | « app/resource_bundle_win.cc ('k') | chrome/browser/resources/bookmark_manager_resources.grd » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698