OLD | NEW |
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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/utf_string_conversions.h" | 6 #include "base/utf_string_conversions.h" |
7 #include "chrome/test/base/in_process_browser_test.h" | 7 #include "chrome/test/base/in_process_browser_test.h" |
8 #include "chrome/test/base/ui_test_utils.h" | 8 #include "chrome/test/base/ui_test_utils.h" |
9 #include "content/browser/renderer_host/resource_dispatcher_host.h" | 9 #include "content/browser/renderer_host/resource_dispatcher_host.h" |
10 #include "content/browser/utility_process_host.h" | 10 #include "content/browser/utility_process_host.h" |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[0].type()); | 101 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[0].type()); |
102 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[1].type()); | 102 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[1].type()); |
103 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type()); | 103 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type()); |
104 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type()); | 104 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type()); |
105 } | 105 } |
106 | 106 |
107 class IDBKeyPathHelper : public UtilityProcessHost::Client { | 107 class IDBKeyPathHelper : public UtilityProcessHost::Client { |
108 public: | 108 public: |
109 IDBKeyPathHelper() | 109 IDBKeyPathHelper() |
110 : expected_id_(0), | 110 : expected_id_(0), |
111 utility_process_host_(NULL), | |
112 value_for_key_path_failed_(false) { | 111 value_for_key_path_failed_(false) { |
113 } | 112 } |
114 | 113 |
115 void CreateUtilityProcess() { | 114 void CreateUtilityProcess() { |
116 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 115 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
117 BrowserThread::PostTask( | 116 BrowserThread::PostTask( |
118 BrowserThread::IO, FROM_HERE, | 117 BrowserThread::IO, FROM_HERE, |
119 base::Bind(&IDBKeyPathHelper::CreateUtilityProcess, this)); | 118 base::Bind(&IDBKeyPathHelper::CreateUtilityProcess, this)); |
120 return; | 119 return; |
121 } | 120 } |
122 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 121 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
123 utility_process_host_ = | 122 utility_process_host_ = |
124 new UtilityProcessHost(this, BrowserThread::IO); | 123 (new UtilityProcessHost(this, BrowserThread::IO))->AsWeakPtr(); |
125 utility_process_host_->set_use_linux_zygote(true); | 124 utility_process_host_->set_use_linux_zygote(true); |
126 utility_process_host_->StartBatchMode(); | 125 utility_process_host_->StartBatchMode(); |
127 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 126 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
128 MessageLoop::QuitClosure()); | 127 MessageLoop::QuitClosure()); |
129 } | 128 } |
130 | 129 |
131 void DestroyUtilityProcess() { | 130 void DestroyUtilityProcess() { |
132 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 131 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
133 BrowserThread::PostTask( | 132 BrowserThread::PostTask( |
134 BrowserThread::IO, FROM_HERE, | 133 BrowserThread::IO, FROM_HERE, |
135 base::Bind(&IDBKeyPathHelper::DestroyUtilityProcess, this)); | 134 base::Bind(&IDBKeyPathHelper::DestroyUtilityProcess, this)); |
136 return; | 135 return; |
137 } | 136 } |
138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 137 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
139 utility_process_host_->EndBatchMode(); | 138 utility_process_host_->EndBatchMode(); |
140 utility_process_host_ = NULL; | 139 utility_process_host_.reset(); |
141 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 140 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
142 MessageLoop::QuitClosure()); | 141 MessageLoop::QuitClosure()); |
143 } | 142 } |
144 | 143 |
145 void SetExpectedKeys(int expected_id, | 144 void SetExpectedKeys(int expected_id, |
146 const std::vector<IndexedDBKey>& expected_keys, | 145 const std::vector<IndexedDBKey>& expected_keys, |
147 bool failed) { | 146 bool failed) { |
148 expected_id_ = expected_id; | 147 expected_id_ = expected_id; |
149 expected_keys_ = expected_keys; | 148 expected_keys_ = expected_keys; |
150 value_for_key_path_failed_ = failed; | 149 value_for_key_path_failed_ = failed; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 void OnInjectIDBKeyFinished(const content::SerializedScriptValue& new_value) { | 231 void OnInjectIDBKeyFinished(const content::SerializedScriptValue& new_value) { |
233 EXPECT_EQ(expected_value_.data(), new_value.data()); | 232 EXPECT_EQ(expected_value_.data(), new_value.data()); |
234 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 233 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
235 MessageLoop::QuitClosure()); | 234 MessageLoop::QuitClosure()); |
236 } | 235 } |
237 | 236 |
238 | 237 |
239 private: | 238 private: |
240 int expected_id_; | 239 int expected_id_; |
241 std::vector<IndexedDBKey> expected_keys_; | 240 std::vector<IndexedDBKey> expected_keys_; |
242 UtilityProcessHost* utility_process_host_; | 241 base::WeakPtr<UtilityProcessHost> utility_process_host_; |
243 bool value_for_key_path_failed_; | 242 bool value_for_key_path_failed_; |
244 content::SerializedScriptValue expected_value_; | 243 content::SerializedScriptValue expected_value_; |
245 }; | 244 }; |
246 | 245 |
247 // This test fixture runs in the UI thread. However, most of the work done by | 246 // This test fixture runs in the UI thread. However, most of the work done by |
248 // UtilityProcessHost (and wrapped by IDBKeyPathHelper above) happens on the IO | 247 // UtilityProcessHost (and wrapped by IDBKeyPathHelper above) happens on the IO |
249 // thread. This fixture delegates to IDBKeyPathHelper and blocks via | 248 // thread. This fixture delegates to IDBKeyPathHelper and blocks via |
250 // "ui_test_utils::RunMessageLoop()", until IDBKeyPathHelper posts a quit | 249 // "ui_test_utils::RunMessageLoop()", until IDBKeyPathHelper posts a quit |
251 // message the MessageLoop. | 250 // message the MessageLoop. |
252 class ScopedIDBKeyPathHelper { | 251 class ScopedIDBKeyPathHelper { |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, | 426 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, |
428 0x5301, 0x6203, 0x7261, 0x013f, 0x3f6f, | 427 0x5301, 0x6203, 0x7261, 0x013f, 0x3f6f, |
429 0x5302, 0x6203, 0x7a61, 0x023f, 0x0853, | 428 0x5302, 0x6203, 0x7a61, 0x023f, 0x0853, |
430 0x796d, 0x654e, 0x4b77, 0x7965, 0x017b, | 429 0x796d, 0x654e, 0x4b77, 0x7965, 0x017b, |
431 0x027b}; | 430 0x027b}; |
432 content::SerializedScriptValue expected_value2( | 431 content::SerializedScriptValue expected_value2( |
433 false, false, string16(expected_data2, arraysize(expected_data2))); | 432 false, false, string16(expected_data2, arraysize(expected_data2))); |
434 scoped_helper.SetExpectedValue(expected_value2); | 433 scoped_helper.SetExpectedValue(expected_value2); |
435 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("bar.baz")); | 434 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("bar.baz")); |
436 } | 435 } |
OLD | NEW |