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

Side by Side Diff: components/nacl/renderer/ppb_nacl_private_impl.cc

Issue 2399463007: AssociatedURLLoader shouldn't derive from WebURLLoader (Closed)
Patch Set: Addressed #38 Created 4 years, 2 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "components/nacl/renderer/ppb_nacl_private.h" 5 #include "components/nacl/renderer/ppb_nacl_private.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 #include "net/http/http_util.h" 56 #include "net/http/http_util.h"
57 #include "ppapi/c/pp_bool.h" 57 #include "ppapi/c/pp_bool.h"
58 #include "ppapi/c/private/pp_file_handle.h" 58 #include "ppapi/c/private/pp_file_handle.h"
59 #include "ppapi/shared_impl/ppapi_globals.h" 59 #include "ppapi/shared_impl/ppapi_globals.h"
60 #include "ppapi/shared_impl/ppapi_permissions.h" 60 #include "ppapi/shared_impl/ppapi_permissions.h"
61 #include "ppapi/shared_impl/ppapi_preferences.h" 61 #include "ppapi/shared_impl/ppapi_preferences.h"
62 #include "ppapi/shared_impl/var.h" 62 #include "ppapi/shared_impl/var.h"
63 #include "ppapi/shared_impl/var_tracker.h" 63 #include "ppapi/shared_impl/var_tracker.h"
64 #include "ppapi/thunk/enter.h" 64 #include "ppapi/thunk/enter.h"
65 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" 65 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h"
66 #include "third_party/WebKit/public/platform/WebURLLoader.h" 66 #include "third_party/WebKit/public/platform/WebURLRequest.h"
67 #include "third_party/WebKit/public/platform/WebURLResponse.h" 67 #include "third_party/WebKit/public/platform/WebURLResponse.h"
68 #include "third_party/WebKit/public/web/WebAssociatedURLLoader.h"
69 #include "third_party/WebKit/public/web/WebAssociatedURLLoaderClient.h"
68 #include "third_party/WebKit/public/web/WebDocument.h" 70 #include "third_party/WebKit/public/web/WebDocument.h"
69 #include "third_party/WebKit/public/web/WebLocalFrame.h" 71 #include "third_party/WebKit/public/web/WebLocalFrame.h"
70 #include "third_party/WebKit/public/web/WebPluginContainer.h" 72 #include "third_party/WebKit/public/web/WebPluginContainer.h"
71 #include "third_party/WebKit/public/web/WebURLLoaderOptions.h"
72 73
73 #if defined(OS_WIN) 74 #if defined(OS_WIN)
74 #include "base/win/scoped_handle.h" 75 #include "base/win/scoped_handle.h"
75 #endif 76 #endif
76 77
77 namespace nacl { 78 namespace nacl {
78 namespace { 79 namespace {
79 80
80 // The pseudo-architecture used to indicate portable native client. 81 // The pseudo-architecture used to indicate portable native client.
81 const char* const kPortableArch = "portable"; 82 const char* const kPortableArch = "portable";
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 callback.Run(base::File(file_info.handle), 322 callback.Run(base::File(file_info.handle),
322 file_info.token_lo, 323 file_info.token_lo,
323 file_info.token_hi); 324 file_info.token_hi);
324 } 325 }
325 326
326 PP_Instance pp_instance_; 327 PP_Instance pp_instance_;
327 NaClAppProcessType process_type_; 328 NaClAppProcessType process_type_;
328 DISALLOW_COPY_AND_ASSIGN(ManifestServiceProxy); 329 DISALLOW_COPY_AND_ASSIGN(ManifestServiceProxy);
329 }; 330 };
330 331
331 blink::WebURLLoader* CreateWebURLLoader(const blink::WebDocument& document, 332 blink::WebAssociatedURLLoader* CreateAssociatedURLLoader(
332 const GURL& gurl) { 333 const blink::WebDocument& document,
333 blink::WebURLLoaderOptions options; 334 const GURL& gurl) {
335 blink::WebAssociatedURLLoaderOptions options;
334 options.untrustedHTTP = true; 336 options.untrustedHTTP = true;
335 337
336 // Options settings here follow the original behavior in the trusted 338 // Options settings here follow the original behavior in the trusted
337 // plugin and PepperURLLoaderHost. 339 // plugin and PepperURLLoaderHost.
338 if (document.getSecurityOrigin().canRequest(gurl)) { 340 if (document.getSecurityOrigin().canRequest(gurl)) {
339 options.allowCredentials = true; 341 options.allowCredentials = true;
340 } else { 342 } else {
341 // Allow CORS. 343 // Allow CORS.
342 options.crossOriginRequestPolicy = 344 options.crossOriginRequestPolicy = blink::WebAssociatedURLLoaderOptions::
343 blink::WebURLLoaderOptions::CrossOriginRequestPolicyUseAccessControl; 345 CrossOriginRequestPolicyUseAccessControl;
344 } 346 }
345 return document.frame()->createAssociatedURLLoader(options); 347 return document.frame()->createAssociatedURLLoader(options);
346 } 348 }
347 349
348 blink::WebURLRequest CreateWebURLRequest(const blink::WebDocument& document, 350 blink::WebURLRequest CreateWebURLRequest(const blink::WebDocument& document,
349 const GURL& gurl) { 351 const GURL& gurl) {
350 blink::WebURLRequest request; 352 blink::WebURLRequest request;
351 request.setURL(gurl); 353 request.setURL(gurl);
352 request.setFirstPartyForCookies(document.firstPartyForCookies()); 354 request.setFirstPartyForCookies(document.firstPartyForCookies());
353 return request; 355 return request;
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
1018 if (!load_manager || !plugin_instance) { 1020 if (!load_manager || !plugin_instance) {
1019 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( 1021 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
1020 FROM_HERE, 1022 FROM_HERE,
1021 base::Bind(callback.func, callback.user_data, 1023 base::Bind(callback.func, callback.user_data,
1022 static_cast<int32_t>(PP_ERROR_FAILED))); 1024 static_cast<int32_t>(PP_ERROR_FAILED)));
1023 } 1025 }
1024 const blink::WebDocument& document = 1026 const blink::WebDocument& document =
1025 plugin_instance->GetContainer()->document(); 1027 plugin_instance->GetContainer()->document();
1026 1028
1027 const GURL& gurl = load_manager->manifest_base_url(); 1029 const GURL& gurl = load_manager->manifest_base_url();
1028 std::unique_ptr<blink::WebURLLoader> url_loader( 1030 std::unique_ptr<blink::WebAssociatedURLLoader> url_loader(
1029 CreateWebURLLoader(document, gurl)); 1031 CreateAssociatedURLLoader(document, gurl));
1030 blink::WebURLRequest request = CreateWebURLRequest(document, gurl); 1032 blink::WebURLRequest request = CreateWebURLRequest(document, gurl);
1031 1033
1032 // ManifestDownloader deletes itself after invoking the callback. 1034 // ManifestDownloader deletes itself after invoking the callback.
1033 ManifestDownloader* manifest_downloader = new ManifestDownloader( 1035 ManifestDownloader* manifest_downloader = new ManifestDownloader(
1034 std::move(url_loader), load_manager->is_installed(), 1036 std::move(url_loader), load_manager->is_installed(),
1035 base::Bind(DownloadManifestToBufferCompletion, instance, callback, 1037 base::Bind(DownloadManifestToBufferCompletion, instance, callback,
1036 base::Time::Now())); 1038 base::Time::Now()));
1037 manifest_downloader->Load(request); 1039 manifest_downloader->Load(request);
1038 } 1040 }
1039 1041
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
1371 content::PepperPluginInstance* plugin_instance = 1373 content::PepperPluginInstance* plugin_instance =
1372 content::PepperPluginInstance::Get(instance); 1374 content::PepperPluginInstance::Get(instance);
1373 if (!plugin_instance) { 1375 if (!plugin_instance) {
1374 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( 1376 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
1375 FROM_HERE, 1377 FROM_HERE,
1376 base::Bind(callback.func, callback.user_data, 1378 base::Bind(callback.func, callback.user_data,
1377 static_cast<int32_t>(PP_ERROR_FAILED))); 1379 static_cast<int32_t>(PP_ERROR_FAILED)));
1378 } 1380 }
1379 const blink::WebDocument& document = 1381 const blink::WebDocument& document =
1380 plugin_instance->GetContainer()->document(); 1382 plugin_instance->GetContainer()->document();
1381 std::unique_ptr<blink::WebURLLoader> url_loader( 1383 std::unique_ptr<blink::WebAssociatedURLLoader> url_loader(
1382 CreateWebURLLoader(document, gurl)); 1384 CreateAssociatedURLLoader(document, gurl));
1383 blink::WebURLRequest url_request = CreateWebURLRequest(document, gurl); 1385 blink::WebURLRequest url_request = CreateWebURLRequest(document, gurl);
1384 1386
1385 ProgressEventRateLimiter* tracker = new ProgressEventRateLimiter(instance); 1387 ProgressEventRateLimiter* tracker = new ProgressEventRateLimiter(instance);
1386 1388
1387 // FileDownloader deletes itself after invoking DownloadNexeCompletion. 1389 // FileDownloader deletes itself after invoking DownloadNexeCompletion.
1388 FileDownloader* file_downloader = new FileDownloader( 1390 FileDownloader* file_downloader = new FileDownloader(
1389 std::move(url_loader), std::move(target_file), 1391 std::move(url_loader), std::move(target_file),
1390 base::Bind(&DownloadNexeCompletion, request, out_file_info), 1392 base::Bind(&DownloadNexeCompletion, request, out_file_info),
1391 base::Bind(&ProgressEventRateLimiter::ReportProgress, 1393 base::Bind(&ProgressEventRateLimiter::ReportProgress,
1392 base::Owned(tracker), std::string(url))); 1394 base::Owned(tracker), std::string(url)));
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1523 1525
1524 content::PepperPluginInstance* plugin_instance = 1526 content::PepperPluginInstance* plugin_instance =
1525 content::PepperPluginInstance::Get(instance); 1527 content::PepperPluginInstance::Get(instance);
1526 if (!plugin_instance) { 1528 if (!plugin_instance) {
1527 base::ThreadTaskRunnerHandle::Get()->PostTask( 1529 base::ThreadTaskRunnerHandle::Get()->PostTask(
1528 FROM_HERE, base::Bind(callback, static_cast<int32_t>(PP_ERROR_FAILED), 1530 FROM_HERE, base::Bind(callback, static_cast<int32_t>(PP_ERROR_FAILED),
1529 kInvalidNaClFileInfo)); 1531 kInvalidNaClFileInfo));
1530 } 1532 }
1531 const blink::WebDocument& document = 1533 const blink::WebDocument& document =
1532 plugin_instance->GetContainer()->document(); 1534 plugin_instance->GetContainer()->document();
1533 std::unique_ptr<blink::WebURLLoader> url_loader( 1535 std::unique_ptr<blink::WebAssociatedURLLoader> url_loader(
1534 CreateWebURLLoader(document, gurl)); 1536 CreateAssociatedURLLoader(document, gurl));
1535 blink::WebURLRequest url_request = CreateWebURLRequest(document, gurl); 1537 blink::WebURLRequest url_request = CreateWebURLRequest(document, gurl);
1536 1538
1537 ProgressEventRateLimiter* tracker = new ProgressEventRateLimiter(instance); 1539 ProgressEventRateLimiter* tracker = new ProgressEventRateLimiter(instance);
1538 1540
1539 // FileDownloader deletes itself after invoking DownloadNexeCompletion. 1541 // FileDownloader deletes itself after invoking DownloadNexeCompletion.
1540 FileDownloader* file_downloader = 1542 FileDownloader* file_downloader =
1541 new FileDownloader(std::move(url_loader), std::move(target_file), 1543 new FileDownloader(std::move(url_loader), std::move(target_file),
1542 base::Bind(&DownloadFileCompletion, callback), 1544 base::Bind(&DownloadFileCompletion, callback),
1543 base::Bind(&ProgressEventRateLimiter::ReportProgress, 1545 base::Bind(&ProgressEventRateLimiter::ReportProgress,
1544 base::Owned(tracker), std::string(url))); 1546 base::Owned(tracker), std::string(url)));
(...skipping 30 matching lines...) Expand all
1575 void PPBNaClPrivate::SetPNaClStartTime(PP_Instance instance) { 1577 void PPBNaClPrivate::SetPNaClStartTime(PP_Instance instance) {
1576 NexeLoadManager* load_manager = GetNexeLoadManager(instance); 1578 NexeLoadManager* load_manager = GetNexeLoadManager(instance);
1577 if (load_manager) 1579 if (load_manager)
1578 load_manager->set_pnacl_start_time(base::Time::Now()); 1580 load_manager->set_pnacl_start_time(base::Time::Now());
1579 } 1581 }
1580 1582
1581 namespace { 1583 namespace {
1582 1584
1583 // PexeDownloader is responsible for deleting itself when the download 1585 // PexeDownloader is responsible for deleting itself when the download
1584 // finishes. 1586 // finishes.
1585 class PexeDownloader : public blink::WebURLLoaderClient { 1587 class PexeDownloader : public blink::WebAssociatedURLLoaderClient {
1586 public: 1588 public:
1587 PexeDownloader(PP_Instance instance, 1589 PexeDownloader(PP_Instance instance,
1588 std::unique_ptr<blink::WebURLLoader> url_loader, 1590 std::unique_ptr<blink::WebAssociatedURLLoader> url_loader,
1589 const std::string& pexe_url, 1591 const std::string& pexe_url,
1590 int32_t pexe_opt_level, 1592 int32_t pexe_opt_level,
1591 bool use_subzero, 1593 bool use_subzero,
1592 const PPP_PexeStreamHandler* stream_handler, 1594 const PPP_PexeStreamHandler* stream_handler,
1593 void* stream_handler_user_data) 1595 void* stream_handler_user_data)
1594 : instance_(instance), 1596 : instance_(instance),
1595 url_loader_(std::move(url_loader)), 1597 url_loader_(std::move(url_loader)),
1596 pexe_url_(pexe_url), 1598 pexe_url_(pexe_url),
1597 pexe_opt_level_(pexe_opt_level), 1599 pexe_opt_level_(pexe_opt_level),
1598 use_subzero_(use_subzero), 1600 use_subzero_(use_subzero),
1599 stream_handler_(stream_handler), 1601 stream_handler_(stream_handler),
1600 stream_handler_user_data_(stream_handler_user_data), 1602 stream_handler_user_data_(stream_handler_user_data),
1601 success_(false), 1603 success_(false),
1602 expected_content_length_(-1), 1604 expected_content_length_(-1),
1603 weak_factory_(this) {} 1605 weak_factory_(this) {}
1604 1606
1605 void Load(const blink::WebURLRequest& request) { 1607 void Load(const blink::WebURLRequest& request) {
1606 url_loader_->loadAsynchronously(request, this); 1608 url_loader_->loadAsynchronously(request, this);
1607 } 1609 }
1608 1610
1609 private: 1611 private:
1610 void didReceiveResponse(blink::WebURLLoader* loader, 1612 void didReceiveResponse(const blink::WebURLResponse& response) override {
1611 const blink::WebURLResponse& response) override {
1612 success_ = (response.httpStatusCode() == 200); 1613 success_ = (response.httpStatusCode() == 200);
1613 if (!success_) 1614 if (!success_)
1614 return; 1615 return;
1615 1616
1616 expected_content_length_ = response.expectedContentLength(); 1617 expected_content_length_ = response.expectedContentLength();
1617 1618
1618 // Defer loading after receiving headers. This is because we may already 1619 // Defer loading after receiving headers. This is because we may already
1619 // have a cached translated nexe, so check for that now. 1620 // have a cached translated nexe, so check for that now.
1620 url_loader_->setDefersLoading(true); 1621 url_loader_->setDefersLoading(true);
1621 1622
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1663 } 1664 }
1664 stream_handler_->DidCacheMiss(stream_handler_user_data_, 1665 stream_handler_->DidCacheMiss(stream_handler_user_data_,
1665 expected_content_length_, 1666 expected_content_length_,
1666 file_handle); 1667 file_handle);
1667 1668
1668 // No translated nexe was found in the cache, so we should download the 1669 // No translated nexe was found in the cache, so we should download the
1669 // file to start streaming it. 1670 // file to start streaming it.
1670 url_loader_->setDefersLoading(false); 1671 url_loader_->setDefersLoading(false);
1671 } 1672 }
1672 1673
1673 void didReceiveData(blink::WebURLLoader* loader, 1674 void didReceiveData(const char* data, int data_length) override {
1674 const char* data,
1675 int data_length,
1676 int encoded_data_length,
1677 int encoded_body_length) override {
1678 if (content::PepperPluginInstance::Get(instance_)) { 1675 if (content::PepperPluginInstance::Get(instance_)) {
1679 // Stream the data we received to the stream callback. 1676 // Stream the data we received to the stream callback.
1680 stream_handler_->DidStreamData(stream_handler_user_data_, 1677 stream_handler_->DidStreamData(stream_handler_user_data_,
1681 data, 1678 data,
1682 data_length); 1679 data_length);
1683 } 1680 }
1684 } 1681 }
1685 1682
1686 void didFinishLoading(blink::WebURLLoader* loader, 1683 void didFinishLoading(double finish_time) override {
1687 double finish_time,
1688 int64_t total_encoded_data_length) override {
1689 int32_t result = success_ ? PP_OK : PP_ERROR_FAILED; 1684 int32_t result = success_ ? PP_OK : PP_ERROR_FAILED;
1690 1685
1691 if (content::PepperPluginInstance::Get(instance_)) 1686 if (content::PepperPluginInstance::Get(instance_))
1692 stream_handler_->DidFinishStream(stream_handler_user_data_, result); 1687 stream_handler_->DidFinishStream(stream_handler_user_data_, result);
1693 delete this; 1688 delete this;
1694 } 1689 }
1695 1690
1696 void didFail(blink::WebURLLoader* loader, 1691 void didFail(const blink::WebURLError& error) override {
1697 const blink::WebURLError& error) override {
1698 if (content::PepperPluginInstance::Get(instance_)) 1692 if (content::PepperPluginInstance::Get(instance_))
1699 stream_handler_->DidFinishStream(stream_handler_user_data_, 1693 stream_handler_->DidFinishStream(stream_handler_user_data_,
1700 PP_ERROR_FAILED); 1694 PP_ERROR_FAILED);
1701 delete this; 1695 delete this;
1702 } 1696 }
1703 1697
1704 PP_Instance instance_; 1698 PP_Instance instance_;
1705 std::unique_ptr<blink::WebURLLoader> url_loader_; 1699 std::unique_ptr<blink::WebAssociatedURLLoader> url_loader_;
1706 std::string pexe_url_; 1700 std::string pexe_url_;
1707 int32_t pexe_opt_level_; 1701 int32_t pexe_opt_level_;
1708 bool use_subzero_; 1702 bool use_subzero_;
1709 const PPP_PexeStreamHandler* stream_handler_; 1703 const PPP_PexeStreamHandler* stream_handler_;
1710 void* stream_handler_user_data_; 1704 void* stream_handler_user_data_;
1711 bool success_; 1705 bool success_;
1712 int64_t expected_content_length_; 1706 int64_t expected_content_length_;
1713 base::WeakPtrFactory<PexeDownloader> weak_factory_; 1707 base::WeakPtrFactory<PexeDownloader> weak_factory_;
1714 }; 1708 };
1715 1709
(...skipping 11 matching lines...) Expand all
1727 if (!plugin_instance) { 1721 if (!plugin_instance) {
1728 base::ThreadTaskRunnerHandle::Get()->PostTask( 1722 base::ThreadTaskRunnerHandle::Get()->PostTask(
1729 FROM_HERE, base::Bind(handler->DidFinishStream, handler_user_data, 1723 FROM_HERE, base::Bind(handler->DidFinishStream, handler_user_data,
1730 static_cast<int32_t>(PP_ERROR_FAILED))); 1724 static_cast<int32_t>(PP_ERROR_FAILED)));
1731 return; 1725 return;
1732 } 1726 }
1733 1727
1734 GURL gurl(pexe_url); 1728 GURL gurl(pexe_url);
1735 const blink::WebDocument& document = 1729 const blink::WebDocument& document =
1736 plugin_instance->GetContainer()->document(); 1730 plugin_instance->GetContainer()->document();
1737 std::unique_ptr<blink::WebURLLoader> url_loader( 1731 std::unique_ptr<blink::WebAssociatedURLLoader> url_loader(
1738 CreateWebURLLoader(document, gurl)); 1732 CreateAssociatedURLLoader(document, gurl));
1739 PexeDownloader* downloader = 1733 PexeDownloader* downloader =
1740 new PexeDownloader(instance, std::move(url_loader), pexe_url, opt_level, 1734 new PexeDownloader(instance, std::move(url_loader), pexe_url, opt_level,
1741 PP_ToBool(use_subzero), handler, handler_user_data); 1735 PP_ToBool(use_subzero), handler, handler_user_data);
1742 1736
1743 blink::WebURLRequest url_request = CreateWebURLRequest(document, gurl); 1737 blink::WebURLRequest url_request = CreateWebURLRequest(document, gurl);
1744 // Mark the request as requesting a PNaCl bitcode file, 1738 // Mark the request as requesting a PNaCl bitcode file,
1745 // so that component updater can detect this user action. 1739 // so that component updater can detect this user action.
1746 url_request.addHTTPHeaderField( 1740 url_request.addHTTPHeaderField(
1747 blink::WebString::fromUTF8("Accept"), 1741 blink::WebString::fromUTF8("Accept"),
1748 blink::WebString::fromUTF8("application/x-pnacl, */*")); 1742 blink::WebString::fromUTF8("application/x-pnacl, */*"));
1749 url_request.setRequestContext(blink::WebURLRequest::RequestContextObject); 1743 url_request.setRequestContext(blink::WebURLRequest::RequestContextObject);
1750 downloader->Load(url_request); 1744 downloader->Load(url_request);
1751 } 1745 }
1752 1746
1753 } // namespace nacl 1747 } // namespace nacl
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698