Use multiline attribute to check for IA2_STATE_MULTILINE.
[chromium-blink-merge.git] / content / browser / download / drag_download_file_browsertest.cc
blobe6a85159b574711c25b5b8208aed1a1aca011627
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
3 // found in the LICENSE file.
5 #include "base/files/file_path.h"
6 #include "base/files/scoped_temp_dir.h"
7 #include "base/memory/ref_counted.h"
8 #include "content/browser/download/download_file_factory.h"
9 #include "content/browser/download/download_file_impl.h"
10 #include "content/browser/download/download_item_impl.h"
11 #include "content/browser/download/download_manager_impl.h"
12 #include "content/browser/download/drag_download_file.h"
13 #include "content/browser/download/drag_download_util.h"
14 #include "content/browser/web_contents/web_contents_impl.h"
15 #include "content/public/browser/content_browser_client.h"
16 #include "content/public/browser/power_save_blocker.h"
17 #include "content/public/common/content_client.h"
18 #include "content/public/test/content_browser_test.h"
19 #include "content/public/test/content_browser_test_utils.h"
20 #include "content/public/test/download_test_observer.h"
21 #include "content/public/test/test_utils.h"
22 #include "content/shell/browser/shell.h"
23 #include "content/shell/browser/shell_browser_context.h"
24 #include "content/shell/browser/shell_download_manager_delegate.h"
25 #include "net/test/url_request/url_request_mock_http_job.h"
26 #include "testing/gmock/include/gmock/gmock.h"
27 #include "testing/gtest/include/gtest/gtest.h"
28 #include "url/gurl.h"
30 using testing::_;
31 using testing::InvokeWithoutArgs;
33 namespace content {
35 class MockDownloadFileObserver : public ui::DownloadFileObserver {
36 public:
37 MockDownloadFileObserver() {}
39 MOCK_METHOD1(OnDownloadCompleted, void(const base::FilePath& file_path));
40 MOCK_METHOD0(OnDownloadAborted, void());
42 private:
43 virtual ~MockDownloadFileObserver() {}
45 DISALLOW_COPY_AND_ASSIGN(MockDownloadFileObserver);
48 class DragDownloadFileTest : public ContentBrowserTest {
49 public:
50 DragDownloadFileTest() {}
51 ~DragDownloadFileTest() override {}
53 void Succeed() {
54 BrowserThread::PostTask(BrowserThread::UI,
55 FROM_HERE,
56 base::MessageLoopForUI::current()->QuitClosure());
59 void FailFast() {
60 CHECK(false);
63 protected:
64 void SetUpOnMainThread() override {
65 ASSERT_TRUE(downloads_directory_.CreateUniqueTempDir());
66 ShellDownloadManagerDelegate* delegate =
67 static_cast<ShellDownloadManagerDelegate*>(
68 shell()->web_contents()->GetBrowserContext()
69 ->GetDownloadManagerDelegate());
70 delegate->SetDownloadBehaviorForTesting(downloads_directory());
73 void SetUpServer() {
74 base::FilePath mock_base(GetTestFilePath("download", ""));
75 BrowserThread::PostTask(
76 BrowserThread::IO, FROM_HERE,
77 base::Bind(
78 &net::URLRequestMockHTTPJob::AddUrlHandlers, mock_base,
79 make_scoped_refptr(content::BrowserThread::GetBlockingPool())));
82 const base::FilePath& downloads_directory() const {
83 return downloads_directory_.path();
86 private:
87 base::ScopedTempDir downloads_directory_;
89 DISALLOW_COPY_AND_ASSIGN(DragDownloadFileTest);
92 IN_PROC_BROWSER_TEST_F(DragDownloadFileTest, DragDownloadFileTest_NetError) {
93 base::FilePath name(downloads_directory().AppendASCII(
94 "DragDownloadFileTest_NetError.txt"));
95 GURL url(net::URLRequestMockHTTPJob::GetMockUrl(
96 base::FilePath(FILE_PATH_LITERAL("download-test.lib"))));
97 Referrer referrer;
98 std::string referrer_encoding;
99 scoped_refptr<DragDownloadFile> file(
100 new DragDownloadFile(name, base::File(), url, referrer,
101 referrer_encoding, shell()->web_contents()));
102 scoped_refptr<MockDownloadFileObserver> observer(
103 new MockDownloadFileObserver());
104 EXPECT_CALL(*observer.get(), OnDownloadAborted())
105 .WillOnce(InvokeWithoutArgs(this, &DragDownloadFileTest::Succeed));
106 ON_CALL(*observer.get(), OnDownloadCompleted(_))
107 .WillByDefault(InvokeWithoutArgs(this, &DragDownloadFileTest::FailFast));
108 file->Start(observer.get());
109 RunMessageLoop();
112 IN_PROC_BROWSER_TEST_F(DragDownloadFileTest, DragDownloadFileTest_Complete) {
113 base::FilePath name(downloads_directory().AppendASCII(
114 "DragDownloadFileTest_Complete.txt"));
115 GURL url(net::URLRequestMockHTTPJob::GetMockUrl(
116 base::FilePath(FILE_PATH_LITERAL("download-test.lib"))));
117 Referrer referrer;
118 std::string referrer_encoding;
119 SetUpServer();
120 scoped_refptr<DragDownloadFile> file(new DragDownloadFile(
121 name, base::File(), url, referrer,
122 referrer_encoding, shell()->web_contents()));
123 scoped_refptr<MockDownloadFileObserver> observer(
124 new MockDownloadFileObserver());
125 EXPECT_CALL(*observer.get(), OnDownloadCompleted(_))
126 .WillOnce(InvokeWithoutArgs(this, &DragDownloadFileTest::Succeed));
127 ON_CALL(*observer.get(), OnDownloadAborted())
128 .WillByDefault(InvokeWithoutArgs(this, &DragDownloadFileTest::FailFast));
129 file->Start(observer.get());
130 RunMessageLoop();
133 // TODO(benjhayden): Test Stop().
135 } // namespace content