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

Side by Side Diff: ppapi/native_client/src/trusted/plugin/plugin.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) 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 #ifdef _MSC_VER 5 #ifdef _MSC_VER
6 // Do not warn about use of std::copy with raw pointers. 6 // Do not warn about use of std::copy with raw pointers.
7 #pragma warning(disable : 4996) 7 #pragma warning(disable : 4996)
8 #endif 8 #endif
9 9
10 #include "native_client/src/trusted/plugin/plugin.h" 10 #include "native_client/src/trusted/plugin/plugin.h"
(...skipping 933 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 tolower); 944 tolower);
945 } 945 }
946 946
947 const char* manifest_url = LookupArgument(kSrcManifestAttribute); 947 const char* manifest_url = LookupArgument(kSrcManifestAttribute);
948 if (NexeIsContentHandler()) { 948 if (NexeIsContentHandler()) {
949 // For content handlers 'src' will be the URL for the content 949 // For content handlers 'src' will be the URL for the content
950 // and 'nacl' will be the URL for the manifest. 950 // and 'nacl' will be the URL for the manifest.
951 manifest_url = LookupArgument(kNaClManifestAttribute); 951 manifest_url = LookupArgument(kNaClManifestAttribute);
952 // For content handlers the NEXE runs in the security context of the 952 // For content handlers the NEXE runs in the security context of the
953 // content it is rendering and the NEXE itself appears to be a 953 // content it is rendering and the NEXE itself appears to be a
954 // cross-origin resource stored in a Chrome extension. We request 954 // cross-origin resource stored in a Chrome extension.
955 // universal access during the NEXE load so that we can read the NEXE.
956 } 955 }
957 // Use the document URL as the base for resolving relative URLs to find the 956 // Use the document URL as the base for resolving relative URLs to find the
958 // manifest. This takes into account the setting of <base> tags that 957 // manifest. This takes into account the setting of <base> tags that
959 // precede the embed/object. 958 // precede the embed/object.
960 CHECK(url_util_ != NULL); 959 CHECK(url_util_ != NULL);
961 pp::Var base_var = url_util_->GetDocumentURL(*this); 960 pp::Var base_var = url_util_->GetDocumentURL(*this);
962 if (!base_var.is_string()) { 961 if (!base_var.is_string()) {
963 PLUGIN_PRINTF(("Plugin::Init (unable to find document url)\n")); 962 PLUGIN_PRINTF(("Plugin::Init (unable to find document url)\n"));
964 return false; 963 return false;
965 } 964 }
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 program_url, 1631 program_url,
1633 translate_callback)); 1632 translate_callback));
1634 return; 1633 return;
1635 } else { 1634 } else {
1636 pp::CompletionCallback open_callback = 1635 pp::CompletionCallback open_callback =
1637 callback_factory_.NewRequiredCallback(&Plugin::NexeFileDidOpen); 1636 callback_factory_.NewRequiredCallback(&Plugin::NexeFileDidOpen);
1638 // Will always call the callback on success or failure. 1637 // Will always call the callback on success or failure.
1639 CHECK( 1638 CHECK(
1640 nexe_downloader_.Open(program_url, 1639 nexe_downloader_.Open(program_url,
1641 DOWNLOAD_TO_FILE, 1640 DOWNLOAD_TO_FILE,
1642 NexeIsContentHandler(),
1643 open_callback, 1641 open_callback,
1644 &UpdateDownloadProgress)); 1642 &UpdateDownloadProgress));
1645 return; 1643 return;
1646 } 1644 }
1647 } 1645 }
1648 // Failed to select the program and/or the translator. 1646 // Failed to select the program and/or the translator.
1649 ReportLoadError(error_info); 1647 ReportLoadError(error_info);
1650 } 1648 }
1651 1649
1652 void Plugin::RequestNaClManifest(const nacl::string& url) { 1650 void Plugin::RequestNaClManifest(const nacl::string& url) {
(...skipping 21 matching lines...) Expand all
1674 set_nacl_ready_state(OPENED); 1672 set_nacl_ready_state(OPENED);
1675 EnqueueProgressEvent(kProgressEventLoadStart); 1673 EnqueueProgressEvent(kProgressEventLoadStart);
1676 bool is_data_uri = GetUrlScheme(nmf_resolved_url.AsString()) == SCHEME_DATA; 1674 bool is_data_uri = GetUrlScheme(nmf_resolved_url.AsString()) == SCHEME_DATA;
1677 HistogramEnumerateManifestIsDataURI(static_cast<int>(is_data_uri)); 1675 HistogramEnumerateManifestIsDataURI(static_cast<int>(is_data_uri));
1678 if (is_data_uri) { 1676 if (is_data_uri) {
1679 pp::CompletionCallback open_callback = 1677 pp::CompletionCallback open_callback =
1680 callback_factory_.NewRequiredCallback(&Plugin::NaClManifestBufferReady); 1678 callback_factory_.NewRequiredCallback(&Plugin::NaClManifestBufferReady);
1681 // Will always call the callback on success or failure. 1679 // Will always call the callback on success or failure.
1682 CHECK(nexe_downloader_.Open(nmf_resolved_url.AsString(), 1680 CHECK(nexe_downloader_.Open(nmf_resolved_url.AsString(),
1683 DOWNLOAD_TO_BUFFER, 1681 DOWNLOAD_TO_BUFFER,
1684 NexeIsContentHandler(),
1685 open_callback, 1682 open_callback,
1686 NULL)); 1683 NULL));
1687 } else { 1684 } else {
1688 pp::CompletionCallback open_callback = 1685 pp::CompletionCallback open_callback =
1689 callback_factory_.NewRequiredCallback(&Plugin::NaClManifestFileDidOpen); 1686 callback_factory_.NewRequiredCallback(&Plugin::NaClManifestFileDidOpen);
1690 // Will always call the callback on success or failure. 1687 // Will always call the callback on success or failure.
1691 CHECK(nexe_downloader_.Open(nmf_resolved_url.AsString(), 1688 CHECK(nexe_downloader_.Open(nmf_resolved_url.AsString(),
1692 DOWNLOAD_TO_FILE, 1689 DOWNLOAD_TO_FILE,
1693 NexeIsContentHandler(),
1694 open_callback, 1690 open_callback,
1695 NULL)); 1691 NULL));
1696 } 1692 }
1697 } 1693 }
1698 1694
1699 1695
1700 bool Plugin::SetManifestObject(const nacl::string& manifest_json, 1696 bool Plugin::SetManifestObject(const nacl::string& manifest_json,
1701 ErrorInfo* error_info) { 1697 ErrorInfo* error_info) {
1702 PLUGIN_PRINTF(("Plugin::SetManifestObject(): manifest_json='%s'.\n", 1698 PLUGIN_PRINTF(("Plugin::SetManifestObject(): manifest_json='%s'.\n",
1703 manifest_json.c_str())); 1699 manifest_json.c_str()));
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1754 PLUGIN_PRINTF(("Plugin::GetFileDesc (url=%s)\n", url.c_str())); 1750 PLUGIN_PRINTF(("Plugin::GetFileDesc (url=%s)\n", url.c_str()));
1755 int32_t file_desc_ok_to_close = NACL_NO_FILE_DESC; 1751 int32_t file_desc_ok_to_close = NACL_NO_FILE_DESC;
1756 std::map<nacl::string, int32_t>::iterator it = url_fd_map_.find(url); 1752 std::map<nacl::string, int32_t>::iterator it = url_fd_map_.find(url);
1757 if (it != url_fd_map_.end()) 1753 if (it != url_fd_map_.end())
1758 file_desc_ok_to_close = DUP(it->second); 1754 file_desc_ok_to_close = DUP(it->second);
1759 return file_desc_ok_to_close; 1755 return file_desc_ok_to_close;
1760 } 1756 }
1761 1757
1762 1758
1763 bool Plugin::StreamAsFile(const nacl::string& url, 1759 bool Plugin::StreamAsFile(const nacl::string& url,
1764 bool permits_extension_urls,
1765 PP_CompletionCallback callback) { 1760 PP_CompletionCallback callback) {
1766 PLUGIN_PRINTF(("Plugin::StreamAsFile (url='%s', permits_extension_urls=%d)\n", 1761 PLUGIN_PRINTF(("Plugin::StreamAsFile (url='%s')\n", url.c_str()));
1767 url.c_str(), permits_extension_urls));
1768 FileDownloader* downloader = new FileDownloader(); 1762 FileDownloader* downloader = new FileDownloader();
1769 downloader->Initialize(this); 1763 downloader->Initialize(this);
1770 url_downloaders_.insert(downloader); 1764 url_downloaders_.insert(downloader);
1771 pp::CompletionCallback open_callback = 1765 pp::CompletionCallback open_callback =
1772 callback_factory_.NewRequiredCallback( 1766 callback_factory_.NewRequiredCallback(
1773 &Plugin::UrlDidOpenForStreamAsFile, downloader, callback); 1767 &Plugin::UrlDidOpenForStreamAsFile, downloader, callback);
1774 // Untrusted loads are always relative to the page's origin. 1768 // Untrusted loads are always relative to the page's origin.
1775 CHECK(url_util_ != NULL); 1769 CHECK(url_util_ != NULL);
1776 pp::Var resolved_url = 1770 pp::Var resolved_url =
1777 url_util_->ResolveRelativeToURL(pp::Var(plugin_base_url()), url); 1771 url_util_->ResolveRelativeToURL(pp::Var(plugin_base_url()), url);
1778 if (!resolved_url.is_string()) { 1772 if (!resolved_url.is_string()) {
1779 PLUGIN_PRINTF(("Plugin::StreamAsFile: " 1773 PLUGIN_PRINTF(("Plugin::StreamAsFile: "
1780 "could not resolve url \"%s\" relative to plugin \"%s\".", 1774 "could not resolve url \"%s\" relative to plugin \"%s\".",
1781 url.c_str(), 1775 url.c_str(),
1782 plugin_base_url().c_str())); 1776 plugin_base_url().c_str()));
1783 return false; 1777 return false;
1784 } 1778 }
1785 // If true, will always call the callback on success or failure. 1779 // If true, will always call the callback on success or failure.
1786 return downloader->Open(url, 1780 return downloader->Open(url,
1787 DOWNLOAD_TO_FILE, 1781 DOWNLOAD_TO_FILE,
1788 permits_extension_urls || NexeIsContentHandler(),
1789 open_callback, 1782 open_callback,
1790 &UpdateDownloadProgress); 1783 &UpdateDownloadProgress);
1791 } 1784 }
1792 1785
1793 #ifndef HACK_FOR_MACOS_HANG_REMOVED 1786 #ifndef HACK_FOR_MACOS_HANG_REMOVED
1794 // The following is needed to avoid a plugin startup hang in the 1787 // The following is needed to avoid a plugin startup hang in the
1795 // MacOS "chrome_browser_tests under gyp" stage. 1788 // MacOS "chrome_browser_tests under gyp" stage.
1796 // TODO(sehr,mseaborn): remove this hack. 1789 // TODO(sehr,mseaborn): remove this hack.
1797 void (plugin::Plugin::*pmem)(int32_t, 1790 void (plugin::Plugin::*pmem)(int32_t,
1798 plugin::FileDownloader*&, 1791 plugin::FileDownloader*&,
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
2053 std::string scheme = canonicalized.AsString().substr(comps.scheme.begin, 2046 std::string scheme = canonicalized.AsString().substr(comps.scheme.begin,
2054 comps.scheme.len); 2047 comps.scheme.len);
2055 if (scheme == kChromeExtensionUriScheme) 2048 if (scheme == kChromeExtensionUriScheme)
2056 return SCHEME_CHROME_EXTENSION; 2049 return SCHEME_CHROME_EXTENSION;
2057 if (scheme == kDataUriScheme) 2050 if (scheme == kDataUriScheme)
2058 return SCHEME_DATA; 2051 return SCHEME_DATA;
2059 return SCHEME_OTHER; 2052 return SCHEME_OTHER;
2060 } 2053 }
2061 2054
2062 } // namespace plugin 2055 } // namespace plugin
OLDNEW
« no previous file with comments | « ppapi/native_client/src/trusted/plugin/plugin.h ('k') | ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698