OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stack> | 5 #include <stack> |
6 #include <string> | 6 #include <string> |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
11 #include "base/callback.h" | 11 #include "base/callback.h" |
12 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
13 #include "base/location.h" | |
14 #include "base/pickle.h" | 13 #include "base/pickle.h" |
15 #include "base/single_thread_task_runner.h" | |
16 #include "base/synchronization/waitable_event.h" | 14 #include "base/synchronization/waitable_event.h" |
17 #include "base/thread_task_runner_handle.h" | |
18 #include "base/threading/thread.h" | 15 #include "base/threading/thread.h" |
19 #include "content/browser/appcache/appcache_response.h" | 16 #include "content/browser/appcache/appcache_response.h" |
20 #include "content/browser/appcache/mock_appcache_service.h" | 17 #include "content/browser/appcache/mock_appcache_service.h" |
21 #include "net/base/io_buffer.h" | 18 #include "net/base/io_buffer.h" |
22 #include "net/base/net_errors.h" | 19 #include "net/base/net_errors.h" |
23 #include "net/http/http_response_headers.h" | 20 #include "net/http/http_response_headers.h" |
24 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
25 | 22 |
26 using net::IOBuffer; | 23 using net::IOBuffer; |
27 using net::WrappedIOBuffer; | 24 using net::WrappedIOBuffer; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 | 68 |
72 static void TearDownTestCase() { | 69 static void TearDownTestCase() { |
73 io_thread_.reset(NULL); | 70 io_thread_.reset(NULL); |
74 } | 71 } |
75 | 72 |
76 AppCacheResponseTest() {} | 73 AppCacheResponseTest() {} |
77 | 74 |
78 template <class Method> | 75 template <class Method> |
79 void RunTestOnIOThread(Method method) { | 76 void RunTestOnIOThread(Method method) { |
80 test_finished_event_ .reset(new base::WaitableEvent(false, false)); | 77 test_finished_event_ .reset(new base::WaitableEvent(false, false)); |
81 io_thread_->task_runner()->PostTask( | 78 io_thread_->message_loop()->PostTask( |
82 FROM_HERE, base::Bind(&AppCacheResponseTest::MethodWrapper<Method>, | 79 FROM_HERE, base::Bind(&AppCacheResponseTest::MethodWrapper<Method>, |
83 base::Unretained(this), method)); | 80 base::Unretained(this), method)); |
84 test_finished_event_->Wait(); | 81 test_finished_event_->Wait(); |
85 } | 82 } |
86 | 83 |
87 void SetUpTest() { | 84 void SetUpTest() { |
88 DCHECK(base::MessageLoop::current() == io_thread_->message_loop()); | 85 DCHECK(base::MessageLoop::current() == io_thread_->message_loop()); |
89 DCHECK(task_stack_.empty()); | 86 DCHECK(task_stack_.empty()); |
90 storage_delegate_.reset(new MockStorageDelegate(this)); | 87 storage_delegate_.reset(new MockStorageDelegate(this)); |
91 service_.reset(new MockAppCacheService()); | 88 service_.reset(new MockAppCacheService()); |
(...skipping 20 matching lines...) Expand all Loading... |
112 write_buffer_ = NULL; | 109 write_buffer_ = NULL; |
113 write_info_buffer_ = NULL; | 110 write_info_buffer_ = NULL; |
114 storage_delegate_.reset(); | 111 storage_delegate_.reset(); |
115 service_.reset(); | 112 service_.reset(); |
116 } | 113 } |
117 | 114 |
118 void TestFinished() { | 115 void TestFinished() { |
119 // We unwind the stack prior to finishing up to let stack | 116 // We unwind the stack prior to finishing up to let stack |
120 // based objects get deleted. | 117 // based objects get deleted. |
121 DCHECK(base::MessageLoop::current() == io_thread_->message_loop()); | 118 DCHECK(base::MessageLoop::current() == io_thread_->message_loop()); |
122 base::ThreadTaskRunnerHandle::Get()->PostTask( | 119 base::MessageLoop::current()->PostTask( |
123 FROM_HERE, base::Bind(&AppCacheResponseTest::TestFinishedUnwound, | 120 FROM_HERE, base::Bind(&AppCacheResponseTest::TestFinishedUnwound, |
124 base::Unretained(this))); | 121 base::Unretained(this))); |
125 } | 122 } |
126 | 123 |
127 void TestFinishedUnwound() { | 124 void TestFinishedUnwound() { |
128 TearDownTest(); | 125 TearDownTest(); |
129 test_finished_event_->Signal(); | 126 test_finished_event_->Signal(); |
130 } | 127 } |
131 | 128 |
132 void PushNextTask(const base::Closure& task) { | 129 void PushNextTask(const base::Closure& task) { |
133 task_stack_.push(std::pair<base::Closure, bool>(task, false)); | 130 task_stack_.push(std::pair<base::Closure, bool>(task, false)); |
134 } | 131 } |
135 | 132 |
136 void PushNextTaskAsImmediate(const base::Closure& task) { | 133 void PushNextTaskAsImmediate(const base::Closure& task) { |
137 task_stack_.push(std::pair<base::Closure, bool>(task, true)); | 134 task_stack_.push(std::pair<base::Closure, bool>(task, true)); |
138 } | 135 } |
139 | 136 |
140 void ScheduleNextTask() { | 137 void ScheduleNextTask() { |
141 DCHECK(base::MessageLoop::current() == io_thread_->message_loop()); | 138 DCHECK(base::MessageLoop::current() == io_thread_->message_loop()); |
142 if (task_stack_.empty()) { | 139 if (task_stack_.empty()) { |
143 TestFinished(); | 140 TestFinished(); |
144 return; | 141 return; |
145 } | 142 } |
146 base::Closure task = task_stack_.top().first; | 143 base::Closure task = task_stack_.top().first; |
147 bool immediate = task_stack_.top().second; | 144 bool immediate = task_stack_.top().second; |
148 task_stack_.pop(); | 145 task_stack_.pop(); |
149 if (immediate) | 146 if (immediate) |
150 task.Run(); | 147 task.Run(); |
151 else | 148 else |
152 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task); | 149 base::MessageLoop::current()->PostTask(FROM_HERE, task); |
153 } | 150 } |
154 | 151 |
155 // Wrappers to call AppCacheResponseReader/Writer Read and Write methods | 152 // Wrappers to call AppCacheResponseReader/Writer Read and Write methods |
156 | 153 |
157 void WriteBasicResponse() { | 154 void WriteBasicResponse() { |
158 static const char kHttpHeaders[] = | 155 static const char kHttpHeaders[] = |
159 "HTTP/1.0 200 OK\0Content-Length: 5\0\0"; | 156 "HTTP/1.0 200 OK\0Content-Length: 5\0\0"; |
160 static const char kHttpBody[] = "Hello"; | 157 static const char kHttpBody[] = "Hello"; |
161 scoped_refptr<IOBuffer> body(new WrappedIOBuffer(kHttpBody)); | 158 scoped_refptr<IOBuffer> body(new WrappedIOBuffer(kHttpBody)); |
162 std::string raw_headers(kHttpHeaders, arraysize(kHttpHeaders)); | 159 std::string raw_headers(kHttpHeaders, arraysize(kHttpHeaders)); |
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 | 729 |
733 void ReadThenDelete() { | 730 void ReadThenDelete() { |
734 read_callback_was_called_ = false; | 731 read_callback_was_called_ = false; |
735 reader_.reset(service_->storage()->CreateResponseReader( | 732 reader_.reset(service_->storage()->CreateResponseReader( |
736 GURL(), 0, written_response_id_)); | 733 GURL(), 0, written_response_id_)); |
737 ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); | 734 ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); |
738 EXPECT_TRUE(reader_->IsReadPending()); | 735 EXPECT_TRUE(reader_->IsReadPending()); |
739 reader_.reset(); | 736 reader_.reset(); |
740 | 737 |
741 // Wait a moment to verify no callbacks. | 738 // Wait a moment to verify no callbacks. |
742 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 739 base::MessageLoop::current()->PostDelayedTask( |
743 FROM_HERE, base::Bind(&AppCacheResponseTest::VerifyNoCallbacks, | 740 FROM_HERE, base::Bind(&AppCacheResponseTest::VerifyNoCallbacks, |
744 base::Unretained(this)), | 741 base::Unretained(this)), |
745 base::TimeDelta::FromMilliseconds(10)); | 742 base::TimeDelta::FromMilliseconds(10)); |
746 } | 743 } |
747 | 744 |
748 void VerifyNoCallbacks() { | 745 void VerifyNoCallbacks() { |
749 EXPECT_TRUE(!write_callback_was_called_); | 746 EXPECT_TRUE(!write_callback_was_called_); |
750 EXPECT_TRUE(!read_callback_was_called_); | 747 EXPECT_TRUE(!read_callback_was_called_); |
751 TestFinished(); | 748 TestFinished(); |
752 } | 749 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 | 809 |
813 TEST_F(AppCacheResponseTest, DeleteWithinCallbacks) { | 810 TEST_F(AppCacheResponseTest, DeleteWithinCallbacks) { |
814 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithinCallbacks); | 811 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithinCallbacks); |
815 } | 812 } |
816 | 813 |
817 TEST_F(AppCacheResponseTest, DeleteWithIOPending) { | 814 TEST_F(AppCacheResponseTest, DeleteWithIOPending) { |
818 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithIOPending); | 815 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithIOPending); |
819 } | 816 } |
820 | 817 |
821 } // namespace content | 818 } // namespace content |
OLD | NEW |