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

Side by Side Diff: ppapi/native_client/src/trusted/plugin/file_downloader.cc

Issue 9159037: Use CORS for fetching NaCl resources from extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add webkit bug# Created 8 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 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 "native_client/src/trusted/plugin/file_downloader.h" 5 #include "native_client/src/trusted/plugin/file_downloader.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 #include <string> 8 #include <string>
9 9
10 #include "native_client/src/include/portability_io.h" 10 #include "native_client/src/include/portability_io.h"
11 #include "native_client/src/shared/platform/nacl_check.h" 11 #include "native_client/src/shared/platform/nacl_check.h"
(...skipping 24 matching lines...) Expand all
36 file_io_trusted_interface_ = static_cast<const PPB_FileIOTrusted*>( 36 file_io_trusted_interface_ = static_cast<const PPB_FileIOTrusted*>(
37 pp::Module::Get()->GetBrowserInterface(PPB_FILEIOTRUSTED_INTERFACE)); 37 pp::Module::Get()->GetBrowserInterface(PPB_FILEIOTRUSTED_INTERFACE));
38 url_loader_trusted_interface_ = static_cast<const PPB_URLLoaderTrusted*>( 38 url_loader_trusted_interface_ = static_cast<const PPB_URLLoaderTrusted*>(
39 pp::Module::Get()->GetBrowserInterface(PPB_URLLOADERTRUSTED_INTERFACE)); 39 pp::Module::Get()->GetBrowserInterface(PPB_URLLOADERTRUSTED_INTERFACE));
40 } 40 }
41 41
42 42
43 bool FileDownloader::Open( 43 bool FileDownloader::Open(
44 const nacl::string& url, 44 const nacl::string& url,
45 DownloadFlags flags, 45 DownloadFlags flags,
46 bool allow_extension_url,
47 const pp::CompletionCallback& callback, 46 const pp::CompletionCallback& callback,
48 PP_URLLoaderTrusted_StatusCallback progress_callback) { 47 PP_URLLoaderTrusted_StatusCallback progress_callback) {
49 PLUGIN_PRINTF(("FileDownloader::Open (url=%s, allow_extension_url=%d)\n", 48 PLUGIN_PRINTF(("FileDownloader::Open (url=%s)\n", url.c_str()));
50 url.c_str(), allow_extension_url));
51 if (callback.pp_completion_callback().func == NULL || 49 if (callback.pp_completion_callback().func == NULL ||
52 instance_ == NULL || 50 instance_ == NULL ||
53 file_io_trusted_interface_ == NULL) 51 file_io_trusted_interface_ == NULL)
54 return false; 52 return false;
55 53
56 CHECK(instance_ != NULL); 54 CHECK(instance_ != NULL);
57 open_time_ = NaClGetTimeOfDayMicroseconds(); 55 open_time_ = NaClGetTimeOfDayMicroseconds();
58 url_to_open_ = url; 56 url_to_open_ = url;
59 url_ = url; 57 url_ = url;
60 file_open_notify_callback_ = callback; 58 file_open_notify_callback_ = callback;
61 flags_ = flags; 59 flags_ = flags;
62 buffer_.clear(); 60 buffer_.clear();
63 pp::URLRequestInfo url_request(instance_); 61 pp::URLRequestInfo url_request(instance_);
64 62
65 do { 63 do {
66 // Reset the url loader and file reader. 64 // Reset the url loader and file reader.
67 // Note that we have the only reference to the underlying objects, so 65 // Note that we have the only reference to the underlying objects, so
68 // this will implicitly close any pending IO and destroy them. 66 // this will implicitly close any pending IO and destroy them.
69 url_loader_ = pp::URLLoader(instance_); 67 url_loader_ = pp::URLLoader(instance_);
70 url_scheme_ = instance_->GetUrlScheme(url); 68 url_scheme_ = instance_->GetUrlScheme(url);
71 bool grant_universal_access = false; 69 bool grant_universal_access = false;
72 if (url_scheme_ == SCHEME_CHROME_EXTENSION) { 70 if (url_scheme_ == SCHEME_CHROME_EXTENSION) {
73 if (allow_extension_url) { 71 // Use CORS to access URLs in the chrome extension scheme. If the files
74 // This NEXE has been granted rights to access URLs in the chrome 72 // are truly restricted, then they should not be listed as a
75 // extension scheme. 73 // web_accessible_resource in the extension manifest.
76 grant_universal_access = true; 74 url_request.SetAllowCrossOriginRequests(true);
77 }
78 } else if (url_scheme_ == SCHEME_DATA) { 75 } else if (url_scheme_ == SCHEME_DATA) {
79 // TODO(elijahtaylor) Remove this when data URIs can be read without 76 // TODO(elijahtaylor) Remove this when data URIs can be read without
80 // universal access. 77 // universal access.
78 // https://bugs.webkit.org/show_bug.cgi?id=17352
81 if (streaming_to_buffer()) { 79 if (streaming_to_buffer()) {
82 grant_universal_access = true; 80 grant_universal_access = true;
83 } else { 81 } else {
84 // Open is to invoke a callback on success or failure. Schedule 82 // Open is to invoke a callback on success or failure. Schedule
85 // it asynchronously to follow PPAPI's convention and avoid reentrancy. 83 // it asynchronously to follow PPAPI's convention and avoid reentrancy.
86 pp::Core* core = pp::Module::Get()->core(); 84 pp::Core* core = pp::Module::Get()->core();
87 core->CallOnMainThread(0, callback, PP_ERROR_NOACCESS); 85 core->CallOnMainThread(0, callback, PP_ERROR_NOACCESS);
88 PLUGIN_PRINTF(("FileDownloader::Open (pp_error=PP_ERROR_NOACCESS)\n")); 86 PLUGIN_PRINTF(("FileDownloader::Open (pp_error=PP_ERROR_NOACCESS)\n"));
89 return true; 87 return true;
90 } 88 }
91 } 89 }
92 90
93 if (url_loader_trusted_interface_ != NULL) { 91 if (url_loader_trusted_interface_ != NULL) {
94 if (grant_universal_access) { 92 if (grant_universal_access) {
95 // TODO(sehr,jvoung): this should use 93 // TODO(sehr,jvoung): See if we can remove this -- currently
96 // pp::URLRequestInfo::SetAllowCrossOriginRequests() when 94 // only used for data URIs.
97 // support for web accessible resources is added to extensions.
98 url_loader_trusted_interface_->GrantUniversalAccess( 95 url_loader_trusted_interface_->GrantUniversalAccess(
99 url_loader_.pp_resource()); 96 url_loader_.pp_resource());
100 } 97 }
101 if (progress_callback != NULL) { 98 if (progress_callback != NULL) {
102 url_request.SetRecordDownloadProgress(true); 99 url_request.SetRecordDownloadProgress(true);
103 url_loader_trusted_interface_->RegisterStatusCallback( 100 url_loader_trusted_interface_->RegisterStatusCallback(
104 url_loader_.pp_resource(), progress_callback); 101 url_loader_.pp_resource(), progress_callback);
105 } 102 }
106 } 103 }
107 104
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 333
337 bool FileDownloader::streaming_to_file() const { 334 bool FileDownloader::streaming_to_file() const {
338 return (flags_ & DOWNLOAD_TO_BUFFER) == 0; 335 return (flags_ & DOWNLOAD_TO_BUFFER) == 0;
339 } 336 }
340 337
341 bool FileDownloader::streaming_to_buffer() const { 338 bool FileDownloader::streaming_to_buffer() const {
342 return (flags_ & DOWNLOAD_TO_BUFFER) == 1; 339 return (flags_ & DOWNLOAD_TO_BUFFER) == 1;
343 } 340 }
344 341
345 } // namespace plugin 342 } // namespace plugin
OLDNEW
« no previous file with comments | « ppapi/native_client/src/trusted/plugin/file_downloader.h ('k') | ppapi/native_client/src/trusted/plugin/json_manifest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698