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

Side by Side Diff: chrome/browser/extensions/api/downloads/downloads_api_unittest.cc

Issue 11410019: ********** Chromium Blob hacking (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 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
« no previous file with comments | « no previous file | content/browser/appcache/appcache_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <algorithm> 5 #include <algorithm>
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/files/scoped_temp_dir.h" 8 #include "base/files/scoped_temp_dir.h"
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 28 matching lines...) Expand all
39 #include "content/public/test/download_test_observer.h" 39 #include "content/public/test/download_test_observer.h"
40 #include "content/test/net/url_request_slow_download_job.h" 40 #include "content/test/net/url_request_slow_download_job.h"
41 #include "net/base/data_url.h" 41 #include "net/base/data_url.h"
42 #include "net/base/net_util.h" 42 #include "net/base/net_util.h"
43 #include "net/url_request/url_request.h" 43 #include "net/url_request/url_request.h"
44 #include "net/url_request/url_request_context.h" 44 #include "net/url_request/url_request_context.h"
45 #include "net/url_request/url_request_job.h" 45 #include "net/url_request/url_request_job.h"
46 #include "net/url_request/url_request_job_factory.h" 46 #include "net/url_request/url_request_job_factory.h"
47 #include "net/url_request/url_request_job_factory_impl.h" 47 #include "net/url_request/url_request_job_factory_impl.h"
48 #include "webkit/blob/blob_data.h" 48 #include "webkit/blob/blob_data.h"
49 #include "webkit/blob/blob_storage_controller.h" 49 #include "webkit/blob/blob_storage_context.h"
50 #include "webkit/blob/blob_url_request_job.h" 50 #include "webkit/blob/blob_url_request_job.h"
51 #include "webkit/fileapi/file_system_context.h" 51 #include "webkit/fileapi/file_system_context.h"
52 #include "webkit/fileapi/file_system_operation.h" 52 #include "webkit/fileapi/file_system_operation.h"
53 #include "webkit/fileapi/file_system_url.h" 53 #include "webkit/fileapi/file_system_url.h"
54 54
55 using content::BrowserContext; 55 using content::BrowserContext;
56 using content::BrowserThread; 56 using content::BrowserThread;
57 using content::DownloadItem; 57 using content::DownloadItem;
58 using content::DownloadManager; 58 using content::DownloadManager;
59 using content::URLRequestSlowDownloadJob; 59 using content::URLRequestSlowDownloadJob;
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 (*item), base::Bind(&ItemNotInProgress)); 615 (*item), base::Bind(&ItemNotInProgress));
616 observer.WaitForEvent(); 616 observer.WaitForEvent();
617 } 617 }
618 } 618 }
619 619
620 private: 620 private:
621 DownloadManager::DownloadVector* items_; 621 DownloadManager::DownloadVector* items_;
622 DISALLOW_COPY_AND_ASSIGN(ScopedItemVectorCanceller); 622 DISALLOW_COPY_AND_ASSIGN(ScopedItemVectorCanceller);
623 }; 623 };
624 624
625 #if 0
625 class TestProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler { 626 class TestProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
626 public: 627 public:
627 explicit TestProtocolHandler( 628 explicit TestProtocolHandler(
628 webkit_blob::BlobStorageController* blob_storage_controller, 629 webkit_blob::BlobStorageContext* blob_storage_context,
629 fileapi::FileSystemContext* file_system_context) 630 fileapi::FileSystemContext* file_system_context)
630 : blob_storage_controller_(blob_storage_controller), 631 : blob_storage_context_(blob_storage_context),
631 file_system_context_(file_system_context) {} 632 file_system_context_(file_system_context) {}
632 633
633 virtual ~TestProtocolHandler() {} 634 virtual ~TestProtocolHandler() {}
634 635
635 virtual net::URLRequestJob* MaybeCreateJob( 636 virtual net::URLRequestJob* MaybeCreateJob(
636 net::URLRequest* request, 637 net::URLRequest* request,
637 net::NetworkDelegate* network_delegate) const OVERRIDE { 638 net::NetworkDelegate* network_delegate) const OVERRIDE {
638 return new webkit_blob::BlobURLRequestJob( 639 return new webkit_blob::BlobURLRequestJob(
639 request, 640 request,
640 network_delegate, 641 network_delegate,
641 blob_storage_controller_->GetBlobDataFromUrl(request->url()), 642 blob_storage_context_->GetBlobDataFromUrl(request->url()),
642 file_system_context_, 643 file_system_context_,
643 base::MessageLoopProxy::current()); 644 base::MessageLoopProxy::current());
644 } 645 }
645 646
646 private: 647 private:
647 webkit_blob::BlobStorageController* const blob_storage_controller_; 648 webkit_blob::BlobStorageContext* const blob_storage_context_;
648 fileapi::FileSystemContext* const file_system_context_; 649 fileapi::FileSystemContext* const file_system_context_;
649 650
650 DISALLOW_COPY_AND_ASSIGN(TestProtocolHandler); 651 DISALLOW_COPY_AND_ASSIGN(TestProtocolHandler);
651 }; 652 };
652 653
653 class TestURLRequestContext : public net::URLRequestContext { 654 class TestURLRequestContext : public net::URLRequestContext {
654 public: 655 public:
655 explicit TestURLRequestContext( 656 explicit TestURLRequestContext(
656 fileapi::FileSystemContext* file_system_context) 657 fileapi::FileSystemContext* file_system_context)
657 : blob_storage_controller_(new webkit_blob::BlobStorageController) { 658 : blob_storage_context_(new webkit_blob::BlobStorageContext) {
658 // Job factory owns the protocol handler. 659 // Job factory owns the protocol handler.
659 job_factory_.SetProtocolHandler( 660 job_factory_.SetProtocolHandler(
660 "blob", new TestProtocolHandler(blob_storage_controller_.get(), 661 "blob", new TestProtocolHandler(blob_storage_context_.get(),
661 file_system_context)); 662 file_system_context));
662 set_job_factory(&job_factory_); 663 set_job_factory(&job_factory_);
663 } 664 }
664 665
665 virtual ~TestURLRequestContext() {} 666 virtual ~TestURLRequestContext() {}
666 667
667 webkit_blob::BlobStorageController* blob_storage_controller() const { 668 webkit_blob::BlobStorageContext* blob_storage_context() const {
668 return blob_storage_controller_.get(); 669 return blob_storage_context_.get();
669 } 670 }
670 671
671 private: 672 private:
672 net::URLRequestJobFactoryImpl job_factory_; 673 net::URLRequestJobFactoryImpl job_factory_;
673 scoped_ptr<webkit_blob::BlobStorageController> blob_storage_controller_; 674 scoped_ptr<webkit_blob::BlobStorageContext> blob_storage_context_;
674 675
675 DISALLOW_COPY_AND_ASSIGN(TestURLRequestContext); 676 DISALLOW_COPY_AND_ASSIGN(TestURLRequestContext);
676 }; 677 };
677 678
678 // TODO(benjhayden): Comment. 679 // TODO(benjhayden): Comment.
680 //
681 // TODO(michaeln): Wow, lots of complexity to create a filesystem file as a
682 // precondition for the DownloadExtensionTest_Download_FileSystemURL.
683 // Some alternatives come to mind:
684 // - load an html page that will produce the file
685 // - more directly write and create the file using lower level
686 // fileapi::FileSystemFileUtilProxy to create the dir entry
687 // and write directly into the platform file path using base file_utils.
679 class HTML5FileWriter { 688 class HTML5FileWriter {
680 public: 689 public:
681 HTML5FileWriter( 690 HTML5FileWriter(
682 Profile* profile, 691 Profile* profile,
683 const std::string& filename, 692 const std::string& filename,
684 const std::string& origin, 693 const std::string& origin,
685 DownloadsEventsListener* events_listener, 694 DownloadsEventsListener* events_listener,
686 const std::string& payload) 695 const std::string& payload)
687 : profile_(profile), 696 : profile_(profile),
688 filename_(filename), 697 filename_(filename),
689 origin_(origin), 698 origin_(origin),
690 events_listener_(events_listener), 699 events_listener_(events_listener),
691 blob_data_(new webkit_blob::BlobData()), 700 blob_data_(new webkit_blob::BlobData()),
692 payload_(payload), 701 payload_(payload),
693 fs_(BrowserContext::GetDefaultStoragePartition(profile_)-> 702 fs_(BrowserContext::GetDefaultStoragePartition(profile_)->
694 GetFileSystemContext()) { 703 GetFileSystemContext()) {
695 CHECK(profile_); 704 CHECK(profile_);
696 CHECK(events_listener_); 705 CHECK(events_listener_);
697 CHECK(fs_); 706 CHECK(fs_);
698 } 707 }
699 708
700 ~HTML5FileWriter() { 709 ~HTML5FileWriter() {
701 CHECK(BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind( 710 CHECK(BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
702 &HTML5FileWriter::TearDownURLRequestContext, base::Unretained(this)))); 711 &HTML5FileWriter::TearDownURLRequestContext, base::Unretained(this))));
703 events_listener_->WaitFor(profile_, kURLRequestContextToreDown, ""); 712 events_listener_->WaitFor(profile_, kURLRequestContextToreDown, "");
704 } 713 }
705 714
706 bool WriteFile() { 715 bool WriteFile() {
707 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 716 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
717 // TODO(michaeln): FSContext should not be used on the UI thread,
718 // this part of the sequence should also be invoked on the IO thread.
708 fs_->OpenFileSystem( 719 fs_->OpenFileSystem(
709 GURL(origin_), 720 GURL(origin_),
710 fileapi::kFileSystemTypeTemporary, 721 fileapi::kFileSystemTypeTemporary,
711 kCreateFileSystem, 722 kCreateFileSystem,
712 base::Bind(&HTML5FileWriter::OpenFileSystemCallback, 723 base::Bind(&HTML5FileWriter::OpenFileSystemCallback,
713 base::Unretained(this))); 724 base::Unretained(this)));
714 return events_listener_->WaitFor(profile_, kHTML5FileWritten, filename_); 725 return events_listener_->WaitFor(profile_, kHTML5FileWritten, filename_);
715 } 726 }
716 727
717 private: 728 private:
(...skipping 23 matching lines...) Expand all
741 operation()->CreateFile(fs_->CrackURL(GURL(root_ + filename_)), 752 operation()->CreateFile(fs_->CrackURL(GURL(root_ + filename_)),
742 kExclusive, base::Bind( 753 kExclusive, base::Bind(
743 &HTML5FileWriter::CreateFileCallback, base::Unretained(this))); 754 &HTML5FileWriter::CreateFileCallback, base::Unretained(this)));
744 } 755 }
745 756
746 void CreateFileCallback(base::PlatformFileError result) { 757 void CreateFileCallback(base::PlatformFileError result) {
747 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 758 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
748 CHECK_EQ(base::PLATFORM_FILE_OK, result); 759 CHECK_EQ(base::PLATFORM_FILE_OK, result);
749 blob_data_->AppendData(payload_); 760 blob_data_->AppendData(payload_);
750 url_request_context_.reset(new TestURLRequestContext(fs_)); 761 url_request_context_.reset(new TestURLRequestContext(fs_));
751 url_request_context_->blob_storage_controller()->AddFinishedBlob( 762 url_request_context_->blob_storage_context()->AddFinishedBlob(
752 blob_url(), blob_data_); 763 blob_url(), blob_data_);
753 operation()->Write( 764 operation()->Write(
754 url_request_context_.get(), 765 url_request_context_.get(),
755 fs_->CrackURL(GURL(root_ + filename_)), 766 fs_->CrackURL(GURL(root_ + filename_)),
756 blob_url(), 767 blob_url(),
757 0, // offset 768 0, // offset
758 base::Bind(&HTML5FileWriter::WriteCallback, base::Unretained(this))); 769 base::Bind(&HTML5FileWriter::WriteCallback, base::Unretained(this)));
759 } 770 }
760 771
761 void WriteCallback( 772 void WriteCallback(
(...skipping 13 matching lines...) Expand all
775 notification_source.profile = profile_; 786 notification_source.profile = profile_;
776 content::NotificationService::current()->Notify( 787 content::NotificationService::current()->Notify(
777 chrome::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT, 788 chrome::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT,
778 content::Source<DownloadsEventsListener::DownloadsNotificationSource>( 789 content::Source<DownloadsEventsListener::DownloadsNotificationSource>(
779 &notification_source), 790 &notification_source),
780 content::Details<std::string>(&filename_)); 791 content::Details<std::string>(&filename_));
781 } 792 }
782 793
783 void TearDownURLRequestContext() { 794 void TearDownURLRequestContext() {
784 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 795 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
785 url_request_context_->blob_storage_controller()->RemoveBlob(blob_url()); 796 url_request_context_->blob_storage_context()->RemoveBlob(blob_url());
786 url_request_context_.reset(); 797 url_request_context_.reset();
787 CHECK(BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind( 798 CHECK(BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind(
788 &HTML5FileWriter::NotifyURLRequestContextToreDown, 799 &HTML5FileWriter::NotifyURLRequestContextToreDown,
789 base::Unretained(this)))); 800 base::Unretained(this))));
790 } 801 }
791 802
792 void NotifyURLRequestContextToreDown() { 803 void NotifyURLRequestContextToreDown() {
793 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 804 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
794 DownloadsEventsListener::DownloadsNotificationSource notification_source; 805 DownloadsEventsListener::DownloadsNotificationSource notification_source;
795 notification_source.event_name = kURLRequestContextToreDown; 806 notification_source.event_name = kURLRequestContextToreDown;
(...skipping 15 matching lines...) Expand all
811 std::string payload_; 822 std::string payload_;
812 scoped_ptr<TestURLRequestContext> url_request_context_; 823 scoped_ptr<TestURLRequestContext> url_request_context_;
813 fileapi::FileSystemContext* fs_; 824 fileapi::FileSystemContext* fs_;
814 825
815 DISALLOW_COPY_AND_ASSIGN(HTML5FileWriter); 826 DISALLOW_COPY_AND_ASSIGN(HTML5FileWriter);
816 }; 827 };
817 828
818 const char HTML5FileWriter::kHTML5FileWritten[] = "html5_file_written"; 829 const char HTML5FileWriter::kHTML5FileWritten[] = "html5_file_written";
819 const char HTML5FileWriter::kURLRequestContextToreDown[] = 830 const char HTML5FileWriter::kURLRequestContextToreDown[] =
820 "url_request_context_tore_down"; 831 "url_request_context_tore_down";
832 #endif
821 833
822 } // namespace 834 } // namespace
823 835
824 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 836 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
825 DownloadExtensionTest_Open) { 837 DownloadExtensionTest_Open) {
826 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 838 EXPECT_STREQ(download_extension_errors::kInvalidOperationError,
827 RunFunctionAndReturnError( 839 RunFunctionAndReturnError(
828 new DownloadsOpenFunction(), 840 new DownloadsOpenFunction(),
829 "[-42]").c_str()); 841 "[-42]").c_str());
830 842
(...skipping 1256 matching lines...) Expand 10 before | Expand all | Expand 10 after
2087 item->Cancel(true); 2099 item->Cancel(true);
2088 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2100 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2089 base::StringPrintf("[{\"id\": %d," 2101 base::StringPrintf("[{\"id\": %d,"
2090 " \"error\": {\"current\": 40}," 2102 " \"error\": {\"current\": 40},"
2091 " \"state\": {" 2103 " \"state\": {"
2092 " \"previous\": \"in_progress\"," 2104 " \"previous\": \"in_progress\","
2093 " \"current\": \"interrupted\"}}]", 2105 " \"current\": \"interrupted\"}}]",
2094 result_id))); 2106 result_id)));
2095 } 2107 }
2096 2108
2109 #if 0
2097 // Test downloading filesystem: URLs. 2110 // Test downloading filesystem: URLs.
2098 // NOTE: chrome disallows creating HTML5 FileSystem Files in incognito. 2111 // NOTE: chrome disallows creating HTML5 FileSystem Files in incognito.
2099 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2112 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
2100 DownloadExtensionTest_Download_FileSystemURL) { 2113 DownloadExtensionTest_Download_FileSystemURL) {
2101 static const char* kPayloadData = "on the record\ndata"; 2114 static const char* kPayloadData = "on the record\ndata";
2102 GoOnTheRecord(); 2115 GoOnTheRecord();
2103 LoadExtension("downloads_split"); 2116 LoadExtension("downloads_split");
2104 HTML5FileWriter html5_file_writer( 2117 HTML5FileWriter html5_file_writer(
2105 browser()->profile(), 2118 browser()->profile(),
2106 "on_record.txt", 2119 "on_record.txt",
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2138 " \"state\": {" 2151 " \"state\": {"
2139 " \"previous\": \"in_progress\"," 2152 " \"previous\": \"in_progress\","
2140 " \"current\": \"complete\"}}]", 2153 " \"current\": \"complete\"}}]",
2141 result_id, 2154 result_id,
2142 GetFilename("on_record.txt.crdownload").c_str(), 2155 GetFilename("on_record.txt.crdownload").c_str(),
2143 GetFilename("on_record.txt").c_str()))); 2156 GetFilename("on_record.txt").c_str())));
2144 std::string disk_data; 2157 std::string disk_data;
2145 EXPECT_TRUE(file_util::ReadFileToString(item->GetFullPath(), &disk_data)); 2158 EXPECT_TRUE(file_util::ReadFileToString(item->GetFullPath(), &disk_data));
2146 EXPECT_STREQ(kPayloadData, disk_data.c_str()); 2159 EXPECT_STREQ(kPayloadData, disk_data.c_str());
2147 } 2160 }
2161 #endif
OLDNEW
« no previous file with comments | « no previous file | content/browser/appcache/appcache_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698