OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "base/string_util.h" | 7 #include "base/string_util.h" |
8 #include "chrome/browser/net/chrome_url_request_context.h" | 8 #include "chrome/browser/net/chrome_url_request_context.h" |
9 #include "chrome/common/extensions/extension.h" | 9 #include "chrome/common/extensions/extension.h" |
| 10 #include "chrome/common/extensions/extension_resource.h" |
10 #include "chrome/common/url_constants.h" | 11 #include "chrome/common/url_constants.h" |
11 #include "googleurl/src/url_util.h" | 12 #include "googleurl/src/url_util.h" |
12 #include "net/base/net_util.h" | 13 #include "net/base/net_util.h" |
13 #include "net/url_request/url_request_file_job.h" | 14 #include "net/url_request/url_request_file_job.h" |
14 | 15 |
15 // Factory registered with URLRequest to create URLRequestJobs for extension:// | 16 // Factory registered with URLRequest to create URLRequestJobs for extension:// |
16 // URLs. | 17 // URLs. |
17 static URLRequestJob* CreateExtensionURLRequestJob(URLRequest* request, | 18 static URLRequestJob* CreateExtensionURLRequestJob(URLRequest* request, |
18 const std::string& scheme) { | 19 const std::string& scheme) { |
19 ChromeURLRequestContext* context = | 20 ChromeURLRequestContext* context = |
20 static_cast<ChromeURLRequestContext*>(request->context()); | 21 static_cast<ChromeURLRequestContext*>(request->context()); |
21 | 22 |
22 // chrome-extension://extension-id/resource/path.js | 23 // chrome-extension://extension-id/resource/path.js |
23 FilePath directory_path = context->GetPathForExtension(request->url().host()); | 24 FilePath directory_path = context->GetPathForExtension(request->url().host()); |
24 if (directory_path.value().empty()) { | 25 if (directory_path.value().empty()) { |
25 LOG(WARNING) << "Failed to GetPathForExtension: " << request->url().host(); | 26 LOG(WARNING) << "Failed to GetPathForExtension: " << request->url().host(); |
26 return NULL; | 27 return NULL; |
27 } | 28 } |
28 | 29 |
29 std::string resource = request->url().path(); | 30 ExtensionResource resource = |
30 FilePath path = Extension::GetResourcePath(directory_path, resource); | 31 Extension::GetResource(directory_path, request->url().path()); |
31 | 32 |
32 return new URLRequestFileJob(request, path); | 33 return new URLRequestFileJob(request, resource.GetFilePath()); |
33 } | 34 } |
34 | 35 |
35 // Factory registered with URLRequest to create URLRequestJobs for | 36 // Factory registered with URLRequest to create URLRequestJobs for |
36 // chrome-user-script:/ URLs. | 37 // chrome-user-script:/ URLs. |
37 static URLRequestJob* CreateUserScriptURLRequestJob(URLRequest* request, | 38 static URLRequestJob* CreateUserScriptURLRequestJob(URLRequest* request, |
38 const std::string& scheme) { | 39 const std::string& scheme) { |
39 ChromeURLRequestContext* context = | 40 ChromeURLRequestContext* context = |
40 static_cast<ChromeURLRequestContext*>(request->context()); | 41 static_cast<ChromeURLRequestContext*>(request->context()); |
41 | 42 |
42 // chrome-user-script:/user-script-name.user.js | 43 // chrome-user-script:/user-script-name.user.js |
43 FilePath directory_path = context->user_script_dir_path(); | 44 FilePath directory_path = context->user_script_dir_path(); |
44 std::string resource = request->url().path(); | |
45 | 45 |
46 FilePath path = Extension::GetResourcePath(directory_path, resource); | 46 ExtensionResource resource = |
47 return new URLRequestFileJob(request, path); | 47 Extension::GetResource(directory_path, request->url().path()); |
| 48 |
| 49 return new URLRequestFileJob(request, resource.GetFilePath()); |
48 } | 50 } |
49 | 51 |
50 void RegisterExtensionProtocols() { | 52 void RegisterExtensionProtocols() { |
51 // Being a standard scheme allows us to resolve relative paths. This is used | 53 // Being a standard scheme allows us to resolve relative paths. This is used |
52 // by extensions, but not by standalone user scripts. | 54 // by extensions, but not by standalone user scripts. |
53 url_util::AddStandardScheme(chrome::kExtensionScheme); | 55 url_util::AddStandardScheme(chrome::kExtensionScheme); |
54 | 56 |
55 URLRequest::RegisterProtocolFactory(chrome::kExtensionScheme, | 57 URLRequest::RegisterProtocolFactory(chrome::kExtensionScheme, |
56 &CreateExtensionURLRequestJob); | 58 &CreateExtensionURLRequestJob); |
57 URLRequest::RegisterProtocolFactory(chrome::kUserScriptScheme, | 59 URLRequest::RegisterProtocolFactory(chrome::kUserScriptScheme, |
58 &CreateUserScriptURLRequestJob); | 60 &CreateUserScriptURLRequestJob); |
59 } | 61 } |
OLD | NEW |