| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/utf_string_conversions.h" | 5 #include "base/utf_string_conversions.h" |
| 6 #include "chrome/browser/browser_process.h" | 6 #include "chrome/browser/browser_process.h" |
| 7 #include "chrome/browser/utility_process_host.h" | |
| 8 #include "chrome/test/in_process_browser_test.h" | 7 #include "chrome/test/in_process_browser_test.h" |
| 9 #include "chrome/test/ui_test_utils.h" | 8 #include "chrome/test/ui_test_utils.h" |
| 10 #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" |
| 11 #include "content/common/indexed_db_key.h" | 11 #include "content/common/indexed_db_key.h" |
| 12 #include "content/common/serialized_script_value.h" | 12 #include "content/common/serialized_script_value.h" |
| 13 #include "content/common/utility_messages.h" |
| 13 #include "googleurl/src/gurl.h" | 14 #include "googleurl/src/gurl.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSerializedScriptVa
lue.h" | 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSerializedScriptVa
lue.h" |
| 16 #include "webkit/glue/idb_bindings.h" | 17 #include "webkit/glue/idb_bindings.h" |
| 17 #include "webkit/glue/web_io_operators.h" | 18 #include "webkit/glue/web_io_operators.h" |
| 18 | 19 |
| 19 using WebKit::WebSerializedScriptValue; | 20 using WebKit::WebSerializedScriptValue; |
| 20 | 21 |
| 21 // Sanity test, check the function call directly outside the sandbox. | 22 // Sanity test, check the function call directly outside the sandbox. |
| 22 TEST(IDBKeyPathWithoutSandbox, Value) { | 23 TEST(IDBKeyPathWithoutSandbox, Value) { |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 int id, const std::vector<SerializedScriptValue>& serialized_values, | 113 int id, const std::vector<SerializedScriptValue>& serialized_values, |
| 113 const string16& key_path) { | 114 const string16& key_path) { |
| 114 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 115 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
| 115 BrowserThread::PostTask( | 116 BrowserThread::PostTask( |
| 116 BrowserThread::IO, FROM_HERE, | 117 BrowserThread::IO, FROM_HERE, |
| 117 NewRunnableMethod(this, &IDBKeyPathHelper::CheckValuesForKeyPath, | 118 NewRunnableMethod(this, &IDBKeyPathHelper::CheckValuesForKeyPath, |
| 118 id, serialized_values, key_path)); | 119 id, serialized_values, key_path)); |
| 119 return; | 120 return; |
| 120 } | 121 } |
| 121 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 122 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 122 bool ret = | 123 bool ret = utility_process_host_->Send( |
| 123 utility_process_host_->StartIDBKeysFromValuesAndKeyPath( | 124 new UtilityMsg_IDBKeysFromValuesAndKeyPath( |
| 124 id, serialized_values, key_path); | 125 id, serialized_values, key_path)); |
| 125 ASSERT_TRUE(ret); | 126 ASSERT_TRUE(ret); |
| 126 } | 127 } |
| 127 | 128 |
| 128 void CheckInjectValue(const IndexedDBKey& key, | 129 void CheckInjectValue(const IndexedDBKey& key, |
| 129 const SerializedScriptValue& value, | 130 const SerializedScriptValue& value, |
| 130 const string16& key_path) { | 131 const string16& key_path) { |
| 131 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 132 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
| 132 BrowserThread::PostTask( | 133 BrowserThread::PostTask( |
| 133 BrowserThread::IO, FROM_HERE, | 134 BrowserThread::IO, FROM_HERE, |
| 134 NewRunnableMethod(this, &IDBKeyPathHelper::CheckInjectValue, | 135 NewRunnableMethod(this, &IDBKeyPathHelper::CheckInjectValue, |
| 135 key, value, key_path)); | 136 key, value, key_path)); |
| 136 return; | 137 return; |
| 137 } | 138 } |
| 138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 139 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 139 bool ret = utility_process_host_->StartInjectIDBKey(key, value, key_path); | 140 bool ret = utility_process_host_->Send(new UtilityMsg_InjectIDBKey( |
| 141 key, value, key_path)); |
| 140 ASSERT_TRUE(ret); | 142 ASSERT_TRUE(ret); |
| 141 } | 143 } |
| 142 | 144 |
| 143 // UtilityProcessHost::Client | 145 // UtilityProcessHost::Client |
| 144 virtual void OnIDBKeysFromValuesAndKeyPathSucceeded( | 146 bool OnMessageReceived(const IPC::Message& message) { |
| 147 bool handled = true; |
| 148 IPC_BEGIN_MESSAGE_MAP(IDBKeyPathHelper, message) |
| 149 IPC_MESSAGE_HANDLER(UtilityHostMsg_IDBKeysFromValuesAndKeyPath_Succeeded, |
| 150 OnIDBKeysFromValuesAndKeyPathSucceeded) |
| 151 IPC_MESSAGE_HANDLER(UtilityHostMsg_IDBKeysFromValuesAndKeyPath_Failed, |
| 152 OnIDBKeysFromValuesAndKeyPathFailed) |
| 153 IPC_MESSAGE_HANDLER(UtilityHostMsg_InjectIDBKey_Finished, |
| 154 OnInjectIDBKeyFinished) |
| 155 IPC_MESSAGE_UNHANDLED(handled = false) |
| 156 IPC_END_MESSAGE_MAP_EX() |
| 157 return handled; |
| 158 } |
| 159 |
| 160 void OnIDBKeysFromValuesAndKeyPathSucceeded( |
| 145 int id, const std::vector<IndexedDBKey>& values) { | 161 int id, const std::vector<IndexedDBKey>& values) { |
| 146 EXPECT_EQ(expected_id_, id); | 162 EXPECT_EQ(expected_id_, id); |
| 147 EXPECT_FALSE(value_for_key_path_failed_); | 163 EXPECT_FALSE(value_for_key_path_failed_); |
| 148 ASSERT_EQ(expected_keys_.size(), values.size()); | 164 ASSERT_EQ(expected_keys_.size(), values.size()); |
| 149 size_t pos = 0; | 165 size_t pos = 0; |
| 150 for (std::vector<IndexedDBKey>::const_iterator i(values.begin()); | 166 for (std::vector<IndexedDBKey>::const_iterator i(values.begin()); |
| 151 i != values.end(); ++i, ++pos) { | 167 i != values.end(); ++i, ++pos) { |
| 152 ASSERT_EQ(expected_keys_[pos].type(), i->type()); | 168 ASSERT_EQ(expected_keys_[pos].type(), i->type()); |
| 153 if (i->type() == WebKit::WebIDBKey::StringType) { | 169 if (i->type() == WebKit::WebIDBKey::StringType) { |
| 154 ASSERT_EQ(expected_keys_[pos].string(), i->string()); | 170 ASSERT_EQ(expected_keys_[pos].string(), i->string()); |
| 155 } else if (i->type() == WebKit::WebIDBKey::NumberType) { | 171 } else if (i->type() == WebKit::WebIDBKey::NumberType) { |
| 156 ASSERT_EQ(expected_keys_[pos].number(), i->number()); | 172 ASSERT_EQ(expected_keys_[pos].number(), i->number()); |
| 157 } | 173 } |
| 158 } | 174 } |
| 159 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 175 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 160 new MessageLoop::QuitTask()); | 176 new MessageLoop::QuitTask()); |
| 161 } | 177 } |
| 162 | 178 |
| 163 virtual void OnIDBKeysFromValuesAndKeyPathFailed(int id) { | 179 void OnIDBKeysFromValuesAndKeyPathFailed(int id) { |
| 164 EXPECT_TRUE(value_for_key_path_failed_); | 180 EXPECT_TRUE(value_for_key_path_failed_); |
| 165 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 181 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 166 new MessageLoop::QuitTask()); | 182 new MessageLoop::QuitTask()); |
| 167 } | 183 } |
| 168 | 184 |
| 169 virtual void OnInjectIDBKeyFinished( | 185 void OnInjectIDBKeyFinished(const SerializedScriptValue& new_value) { |
| 170 const SerializedScriptValue& new_value) { | |
| 171 EXPECT_EQ(expected_value_.data(), new_value.data()); | 186 EXPECT_EQ(expected_value_.data(), new_value.data()); |
| 172 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 187 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 173 new MessageLoop::QuitTask()); | 188 new MessageLoop::QuitTask()); |
| 174 } | 189 } |
| 175 | 190 |
| 176 | 191 |
| 177 private: | 192 private: |
| 178 int expected_id_; | 193 int expected_id_; |
| 179 std::vector<IndexedDBKey> expected_keys_; | 194 std::vector<IndexedDBKey> expected_keys_; |
| 180 UtilityProcessHost* utility_process_host_; | 195 UtilityProcessHost* utility_process_host_; |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 string16(expected_data, | 335 string16(expected_data, |
| 321 arraysize(expected_data))); | 336 arraysize(expected_data))); |
| 322 | 337 |
| 323 ScopedIDBKeyPathHelper scoped_helper; | 338 ScopedIDBKeyPathHelper scoped_helper; |
| 324 scoped_helper.SetExpectedValue(expected_value); | 339 scoped_helper.SetExpectedValue(expected_value); |
| 325 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("bar")); | 340 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("bar")); |
| 326 | 341 |
| 327 scoped_helper.SetExpectedValue(SerializedScriptValue()); // Expect null. | 342 scoped_helper.SetExpectedValue(SerializedScriptValue()); // Expect null. |
| 328 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("bad.key.path")); | 343 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("bad.key.path")); |
| 329 } | 344 } |
| OLD | NEW |