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

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

Issue 56833003: Use base::PostTaskAndReplyWithResults() in more places. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, fix clang error 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"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 #include "net/base/net_errors.h" 49 #include "net/base/net_errors.h"
50 #include "net/http/http_request_headers.h" 50 #include "net/http/http_request_headers.h"
51 #include "net/http/http_response_headers.h" 51 #include "net/http/http_response_headers.h"
52 #include "net/http/http_response_info.h" 52 #include "net/http/http_response_info.h"
53 #include "net/url_request/url_request_error_job.h" 53 #include "net/url_request/url_request_error_job.h"
54 #include "net/url_request/url_request_file_job.h" 54 #include "net/url_request/url_request_file_job.h"
55 #include "net/url_request/url_request_simple_job.h" 55 #include "net/url_request/url_request_simple_job.h"
56 #include "ui/base/resource/resource_bundle.h" 56 #include "ui/base/resource/resource_bundle.h"
57 #include "url/url_util.h" 57 #include "url/url_util.h"
58 58
59 using content::BrowserThread;
59 using content::ResourceRequestInfo; 60 using content::ResourceRequestInfo;
60 using extensions::Extension; 61 using extensions::Extension;
61 using extensions::SharedModuleInfo; 62 using extensions::SharedModuleInfo;
62 63
63 namespace { 64 namespace {
64 65
65 net::HttpResponseHeaders* BuildHttpHeaders( 66 net::HttpResponseHeaders* BuildHttpHeaders(
66 const std::string& content_security_policy, bool send_cors_header, 67 const std::string& content_security_policy, bool send_cors_header,
67 const base::Time& last_modified_time) { 68 const base::Time& last_modified_time) {
68 std::string raw_headers; 69 std::string raw_headers;
(...skipping 24 matching lines...) Expand all
93 // Also force revalidation. 94 // Also force revalidation.
94 raw_headers.append(1, '\0'); 95 raw_headers.append(1, '\0');
95 raw_headers.append("cache-control: no-cache"); 96 raw_headers.append("cache-control: no-cache");
96 } 97 }
97 } 98 }
98 99
99 raw_headers.append(2, '\0'); 100 raw_headers.append(2, '\0');
100 return new net::HttpResponseHeaders(raw_headers); 101 return new net::HttpResponseHeaders(raw_headers);
101 } 102 }
102 103
103 void ReadMimeTypeFromFile(const base::FilePath& filename,
104 std::string* mime_type,
105 bool* result) {
106 *result = net::GetMimeTypeFromFile(filename, mime_type);
107 }
108
109 class URLRequestResourceBundleJob : public net::URLRequestSimpleJob { 104 class URLRequestResourceBundleJob : public net::URLRequestSimpleJob {
110 public: 105 public:
111 URLRequestResourceBundleJob(net::URLRequest* request, 106 URLRequestResourceBundleJob(net::URLRequest* request,
112 net::NetworkDelegate* network_delegate, 107 net::NetworkDelegate* network_delegate,
113 const base::FilePath& filename, 108 const base::FilePath& filename,
114 int resource_id, 109 int resource_id,
115 const std::string& content_security_policy, 110 const std::string& content_security_policy,
116 bool send_cors_header) 111 bool send_cors_header)
117 : net::URLRequestSimpleJob(request, network_delegate), 112 : net::URLRequestSimpleJob(request, network_delegate),
118 filename_(filename), 113 filename_(filename),
(...skipping 12 matching lines...) Expand all
131 const net::CompletionCallback& callback) const OVERRIDE { 126 const net::CompletionCallback& callback) const OVERRIDE {
132 const ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 127 const ResourceBundle& rb = ResourceBundle::GetSharedInstance();
133 *data = rb.GetRawDataResource(resource_id_).as_string(); 128 *data = rb.GetRawDataResource(resource_id_).as_string();
134 129
135 // Add the Content-Length header now that we know the resource length. 130 // Add the Content-Length header now that we know the resource length.
136 response_info_.headers->AddHeader(base::StringPrintf( 131 response_info_.headers->AddHeader(base::StringPrintf(
137 "%s: %s", net::HttpRequestHeaders::kContentLength, 132 "%s: %s", net::HttpRequestHeaders::kContentLength,
138 base::UintToString(data->size()).c_str())); 133 base::UintToString(data->size()).c_str()));
139 134
140 std::string* read_mime_type = new std::string; 135 std::string* read_mime_type = new std::string;
141 bool* read_result = new bool; 136 bool posted = base::PostTaskAndReplyWithResult(
142 bool posted = content::BrowserThread::PostBlockingPoolTaskAndReply( 137 BrowserThread::GetBlockingPool(),
143 FROM_HERE, 138 FROM_HERE,
144 base::Bind(&ReadMimeTypeFromFile, filename_, 139 base::Bind(&net::GetMimeTypeFromFile, filename_,
145 base::Unretained(read_mime_type), 140 base::Unretained(read_mime_type)),
146 base::Unretained(read_result)),
147 base::Bind(&URLRequestResourceBundleJob::OnMimeTypeRead, 141 base::Bind(&URLRequestResourceBundleJob::OnMimeTypeRead,
148 weak_factory_.GetWeakPtr(), 142 weak_factory_.GetWeakPtr(),
149 mime_type, charset, data, 143 mime_type, charset, data,
150 base::Owned(read_mime_type), 144 base::Owned(read_mime_type),
151 base::Owned(read_result),
152 callback)); 145 callback));
153 DCHECK(posted); 146 DCHECK(posted);
154 147
155 return net::ERR_IO_PENDING; 148 return net::ERR_IO_PENDING;
156 } 149 }
157 150
158 virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE { 151 virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE {
159 *info = response_info_; 152 *info = response_info_;
160 } 153 }
161 154
162 private: 155 private:
163 virtual ~URLRequestResourceBundleJob() { } 156 virtual ~URLRequestResourceBundleJob() { }
164 157
165 void OnMimeTypeRead(std::string* out_mime_type, 158 void OnMimeTypeRead(std::string* out_mime_type,
166 std::string* charset, 159 std::string* charset,
167 std::string* data, 160 std::string* data,
168 std::string* read_mime_type, 161 std::string* read_mime_type,
169 bool* read_result, 162 const net::CompletionCallback& callback,
170 const net::CompletionCallback& callback) { 163 bool read_result) {
171 *out_mime_type = *read_mime_type; 164 *out_mime_type = *read_mime_type;
172 if (StartsWithASCII(*read_mime_type, "text/", false)) { 165 if (StartsWithASCII(*read_mime_type, "text/", false)) {
173 // All of our HTML files should be UTF-8 and for other resource types 166 // All of our HTML files should be UTF-8 and for other resource types
174 // (like images), charset doesn't matter. 167 // (like images), charset doesn't matter.
175 DCHECK(IsStringUTF8(*data)); 168 DCHECK(IsStringUTF8(*data));
176 *charset = "utf-8"; 169 *charset = "utf-8";
177 } 170 }
178 int result = *read_result? net::OK: net::ERR_INVALID_URL; 171 int result = read_result ? net::OK : net::ERR_INVALID_URL;
179 callback.Run(result); 172 callback.Run(result);
180 } 173 }
181 174
182 // We need the filename of the resource to determine the mime type. 175 // We need the filename of the resource to determine the mime type.
183 base::FilePath filename_; 176 base::FilePath filename_;
184 177
185 // The resource bundle id to load. 178 // The resource bundle id to load.
186 int resource_id_; 179 int resource_id_;
187 180
188 net::HttpResponseInfo response_info_; 181 net::HttpResponseInfo response_info_;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 public: 280 public:
288 URLRequestExtensionJob(net::URLRequest* request, 281 URLRequestExtensionJob(net::URLRequest* request,
289 net::NetworkDelegate* network_delegate, 282 net::NetworkDelegate* network_delegate,
290 const std::string& extension_id, 283 const std::string& extension_id,
291 const base::FilePath& directory_path, 284 const base::FilePath& directory_path,
292 const base::FilePath& relative_path, 285 const base::FilePath& relative_path,
293 const std::string& content_security_policy, 286 const std::string& content_security_policy,
294 bool send_cors_header) 287 bool send_cors_header)
295 : net::URLRequestFileJob( 288 : net::URLRequestFileJob(
296 request, network_delegate, base::FilePath(), 289 request, network_delegate, base::FilePath(),
297 content::BrowserThread::GetBlockingPool()-> 290 BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
298 GetTaskRunnerWithShutdownBehavior(
299 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)), 291 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)),
300 directory_path_(directory_path), 292 directory_path_(directory_path),
301 // TODO(tc): Move all of these files into resources.pak so we don't break 293 // TODO(tc): Move all of these files into resources.pak so we don't break
302 // when updating on Linux. 294 // when updating on Linux.
303 resource_(extension_id, directory_path, relative_path), 295 resource_(extension_id, directory_path, relative_path),
304 content_security_policy_(content_security_policy), 296 content_security_policy_(content_security_policy),
305 send_cors_header_(send_cors_header), 297 send_cors_header_(send_cors_header),
306 weak_factory_(this) { 298 weak_factory_(this) {
307 } 299 }
308 300
309 virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE { 301 virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE {
310 *info = response_info_; 302 *info = response_info_;
311 } 303 }
312 304
313 virtual void Start() OVERRIDE { 305 virtual void Start() OVERRIDE {
314 base::FilePath* read_file_path = new base::FilePath; 306 base::FilePath* read_file_path = new base::FilePath;
315 base::Time* last_modified_time = new base::Time(); 307 base::Time* last_modified_time = new base::Time();
316 bool posted = content::BrowserThread::PostBlockingPoolTaskAndReply( 308 bool posted = BrowserThread::PostBlockingPoolTaskAndReply(
317 FROM_HERE, 309 FROM_HERE,
318 base::Bind(&ReadResourceFilePathAndLastModifiedTime, resource_, 310 base::Bind(&ReadResourceFilePathAndLastModifiedTime, resource_,
319 directory_path_, 311 directory_path_,
320 base::Unretained(read_file_path), 312 base::Unretained(read_file_path),
321 base::Unretained(last_modified_time)), 313 base::Unretained(last_modified_time)),
322 base::Bind(&URLRequestExtensionJob::OnFilePathAndLastModifiedTimeRead, 314 base::Bind(&URLRequestExtensionJob::OnFilePathAndLastModifiedTimeRead,
323 weak_factory_.GetWeakPtr(), 315 weak_factory_.GetWeakPtr(),
324 base::Owned(read_file_path), 316 base::Owned(read_file_path),
325 base::Owned(last_modified_time))); 317 base::Owned(last_modified_time)));
326 DCHECK(posted); 318 DCHECK(posted);
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 send_cors_header); 621 send_cors_header);
630 } 622 }
631 623
632 } // namespace 624 } // namespace
633 625
634 net::URLRequestJobFactory::ProtocolHandler* CreateExtensionProtocolHandler( 626 net::URLRequestJobFactory::ProtocolHandler* CreateExtensionProtocolHandler(
635 bool is_incognito, 627 bool is_incognito,
636 extensions::InfoMap* extension_info_map) { 628 extensions::InfoMap* extension_info_map) {
637 return new ExtensionProtocolHandler(is_incognito, extension_info_map); 629 return new ExtensionProtocolHandler(is_incognito, extension_info_map);
638 } 630 }
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/extensions/install_limiter.cc ('k') | chrome/browser/extensions/image_loader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698