| 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/utility_process_host_impl.h" | 9 #include "content/browser/utility_process_host_impl.h" |
| 10 #include "content/public/browser/utility_process_host_client.h" | 10 #include "content/public/browser/utility_process_host_client.h" |
| 11 #include "content/common/indexed_db/indexed_db_key.h" | 11 #include "content/common/indexed_db/indexed_db_key.h" |
| 12 #include "content/common/indexed_db/indexed_db_key_path.h" |
| 12 #include "content/common/utility_messages.h" | 13 #include "content/common/utility_messages.h" |
| 13 #include "content/common/webkitplatformsupport_impl.h" | 14 #include "content/common/webkitplatformsupport_impl.h" |
| 14 #include "content/public/common/serialized_script_value.h" | 15 #include "content/public/common/serialized_script_value.h" |
| 15 #include "googleurl/src/gurl.h" | 16 #include "googleurl/src/gurl.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" | 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" |
| 18 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSerialize
dScriptValue.h" | 19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSerialize
dScriptValue.h" |
| 19 #include "webkit/glue/idb_bindings.h" | 20 #include "webkit/glue/idb_bindings.h" |
| 20 #include "webkit/glue/web_io_operators.h" | 21 #include "webkit/glue/web_io_operators.h" |
| 21 | 22 |
| 22 using content::BrowserThread; | 23 using content::BrowserThread; |
| 23 using content::UtilityProcessHost; | 24 using content::UtilityProcessHost; |
| 24 using content::UtilityProcessHostClient; | 25 using content::UtilityProcessHostClient; |
| 25 using WebKit::WebSerializedScriptValue; | 26 using WebKit::WebSerializedScriptValue; |
| 27 using WebKit::WebIDBKeyPath; |
| 26 | 28 |
| 27 // Enables calling WebKit::shutdown no matter where a "return" happens. | 29 // Enables calling WebKit::shutdown no matter where a "return" happens. |
| 28 class ScopedShutdownWebKit { | 30 class ScopedShutdownWebKit { |
| 29 public: | 31 public: |
| 30 ScopedShutdownWebKit() { | 32 ScopedShutdownWebKit() { |
| 31 } | 33 } |
| 32 | 34 |
| 33 ~ScopedShutdownWebKit() { | 35 ~ScopedShutdownWebKit() { |
| 34 WebKit::shutdown(); | 36 WebKit::shutdown(); |
| 35 } | 37 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 59 // {} | 61 // {} |
| 60 char16 data_object[] = {0x017b}; | 62 char16 data_object[] = {0x017b}; |
| 61 serialized_values.push_back(content::SerializedScriptValue( | 63 serialized_values.push_back(content::SerializedScriptValue( |
| 62 false, false, string16(data_object, arraysize(data_object)))); | 64 false, false, string16(data_object, arraysize(data_object)))); |
| 63 | 65 |
| 64 // null | 66 // null |
| 65 serialized_values.push_back( | 67 serialized_values.push_back( |
| 66 WebSerializedScriptValue::fromString(string16())); | 68 WebSerializedScriptValue::fromString(string16())); |
| 67 | 69 |
| 68 std::vector<WebKit::WebIDBKey> values; | 70 std::vector<WebKit::WebIDBKey> values; |
| 69 string16 key_path; | 71 IndexedDBKeyPath key_path; |
| 70 bool error; | |
| 71 | 72 |
| 72 key_path = UTF8ToUTF16("foo"); | 73 key_path.SetString(UTF8ToUTF16("foo")); |
| 73 error = webkit_glue::IDBKeysFromValuesAndKeyPath( | 74 webkit_glue::IDBKeysFromValuesAndKeyPath( |
| 74 serialized_values, key_path, &values); | 75 serialized_values, key_path, &values); |
| 75 | 76 |
| 76 ASSERT_EQ(size_t(4), values.size()); | 77 ASSERT_EQ(size_t(4), values.size()); |
| 77 ASSERT_EQ(WebKit::WebIDBKey::StringType, values[0].type()); | 78 ASSERT_EQ(WebKit::WebIDBKey::StringType, values[0].type()); |
| 78 ASSERT_EQ(UTF8ToUTF16("zoo"), values[0].string()); | 79 ASSERT_EQ(UTF8ToUTF16("zoo"), values[0].string()); |
| 79 ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[1].type()); | 80 ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[1].type()); |
| 80 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type()); | 81 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type()); |
| 81 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type()); | 82 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type()); |
| 82 ASSERT_FALSE(error); | |
| 83 | 83 |
| 84 values.clear(); | 84 values.clear(); |
| 85 key_path = UTF8ToUTF16("PropertyNotAvailable"); | 85 key_path.SetString(UTF8ToUTF16("PropertyNotAvailable")); |
| 86 error = webkit_glue::IDBKeysFromValuesAndKeyPath( | 86 webkit_glue::IDBKeysFromValuesAndKeyPath( |
| 87 serialized_values, key_path, &values); | 87 serialized_values, key_path, &values); |
| 88 | 88 |
| 89 ASSERT_EQ(size_t(4), values.size()); | 89 ASSERT_EQ(size_t(4), values.size()); |
| 90 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[0].type()); | 90 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[0].type()); |
| 91 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[1].type()); | 91 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[1].type()); |
| 92 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type()); | 92 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type()); |
| 93 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type()); | 93 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type()); |
| 94 ASSERT_FALSE(error); | |
| 95 | 94 |
| 96 values.clear(); | 95 values.clear(); |
| 97 key_path = UTF8ToUTF16("!+Invalid[KeyPath[[["); | 96 key_path.SetString(UTF8ToUTF16("!+Invalid[KeyPath[[[")); |
| 98 error = webkit_glue::IDBKeysFromValuesAndKeyPath( | 97 ASSERT_FALSE(key_path.IsValid()); |
| 99 serialized_values, key_path, &values); | |
| 100 | |
| 101 ASSERT_TRUE(error); | |
| 102 ASSERT_EQ(size_t(4), values.size()); | |
| 103 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[0].type()); | |
| 104 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[1].type()); | |
| 105 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type()); | |
| 106 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type()); | |
| 107 } | 98 } |
| 108 | 99 |
| 109 class IDBKeyPathHelper : public UtilityProcessHostClient { | 100 class IDBKeyPathHelper : public UtilityProcessHostClient { |
| 110 public: | 101 public: |
| 111 IDBKeyPathHelper() | 102 IDBKeyPathHelper() |
| 112 : expected_id_(0), | 103 : expected_id_(0), |
| 113 value_for_key_path_failed_(false) { | 104 value_for_key_path_failed_(false) { |
| 114 } | 105 } |
| 115 | 106 |
| 116 void CreateUtilityProcess() { | 107 void CreateUtilityProcess() { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 value_for_key_path_failed_ = failed; | 142 value_for_key_path_failed_ = failed; |
| 152 } | 143 } |
| 153 | 144 |
| 154 void SetExpectedValue(const content::SerializedScriptValue& expected_value) { | 145 void SetExpectedValue(const content::SerializedScriptValue& expected_value) { |
| 155 expected_value_ = expected_value; | 146 expected_value_ = expected_value; |
| 156 } | 147 } |
| 157 | 148 |
| 158 void CheckValuesForKeyPath( | 149 void CheckValuesForKeyPath( |
| 159 int id, | 150 int id, |
| 160 const std::vector<content::SerializedScriptValue>& serialized_values, | 151 const std::vector<content::SerializedScriptValue>& serialized_values, |
| 161 const string16& key_path) { | 152 const IndexedDBKeyPath& key_path) { |
| 162 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 153 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
| 163 BrowserThread::PostTask( | 154 BrowserThread::PostTask( |
| 164 BrowserThread::IO, FROM_HERE, | 155 BrowserThread::IO, FROM_HERE, |
| 165 base::Bind(&IDBKeyPathHelper::CheckValuesForKeyPath, this, id, | 156 base::Bind(&IDBKeyPathHelper::CheckValuesForKeyPath, this, id, |
| 166 serialized_values, key_path)); | 157 serialized_values, key_path)); |
| 167 return; | 158 return; |
| 168 } | 159 } |
| 169 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 160 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 170 bool ret = utility_process_host_->Send( | 161 bool ret = utility_process_host_->Send( |
| 171 new UtilityMsg_IDBKeysFromValuesAndKeyPath( | 162 new UtilityMsg_IDBKeysFromValuesAndKeyPath( |
| 172 id, serialized_values, key_path)); | 163 id, serialized_values, key_path)); |
| 173 ASSERT_TRUE(ret); | 164 ASSERT_TRUE(ret); |
| 174 } | 165 } |
| 175 | 166 |
| 176 void CheckInjectValue(const IndexedDBKey& key, | 167 void CheckInjectValue(const IndexedDBKey& key, |
| 177 const content::SerializedScriptValue& value, | 168 const content::SerializedScriptValue& value, |
| 178 const string16& key_path) { | 169 const IndexedDBKeyPath& key_path) { |
| 179 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 170 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
| 180 BrowserThread::PostTask( | 171 BrowserThread::PostTask( |
| 181 BrowserThread::IO, FROM_HERE, | 172 BrowserThread::IO, FROM_HERE, |
| 182 base::Bind(&IDBKeyPathHelper::CheckInjectValue, this, key, value, | 173 base::Bind(&IDBKeyPathHelper::CheckInjectValue, this, key, value, |
| 183 key_path)); | 174 key_path)); |
| 184 return; | 175 return; |
| 185 } | 176 } |
| 186 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 177 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 187 bool ret = utility_process_host_->Send(new UtilityMsg_InjectIDBKey( | 178 bool ret = utility_process_host_->Send(new UtilityMsg_InjectIDBKey( |
| 188 key, value, key_path)); | 179 key, value, key_path)); |
| 189 ASSERT_TRUE(ret); | 180 ASSERT_TRUE(ret); |
| 190 } | 181 } |
| 191 | 182 |
| 192 // UtilityProcessHostClient | 183 // UtilityProcessHostClient |
| 193 bool OnMessageReceived(const IPC::Message& message) { | 184 bool OnMessageReceived(const IPC::Message& message) { |
| 194 bool msg_is_ok = true; | 185 bool msg_is_ok = true; |
| 195 bool handled = true; | 186 bool handled = true; |
| 196 IPC_BEGIN_MESSAGE_MAP_EX(IDBKeyPathHelper, message, msg_is_ok) | 187 IPC_BEGIN_MESSAGE_MAP_EX(IDBKeyPathHelper, message, msg_is_ok) |
| 197 IPC_MESSAGE_HANDLER(UtilityHostMsg_IDBKeysFromValuesAndKeyPath_Succeeded, | 188 IPC_MESSAGE_HANDLER(UtilityHostMsg_IDBKeysFromValuesAndKeyPath_Succeeded, |
| 198 OnIDBKeysFromValuesAndKeyPathSucceeded) | 189 OnIDBKeysFromValuesAndKeyPathSucceeded) |
| 199 IPC_MESSAGE_HANDLER(UtilityHostMsg_IDBKeysFromValuesAndKeyPath_Failed, | |
| 200 OnIDBKeysFromValuesAndKeyPathFailed) | |
| 201 IPC_MESSAGE_HANDLER(UtilityHostMsg_InjectIDBKey_Finished, | 190 IPC_MESSAGE_HANDLER(UtilityHostMsg_InjectIDBKey_Finished, |
| 202 OnInjectIDBKeyFinished) | 191 OnInjectIDBKeyFinished) |
| 203 IPC_MESSAGE_UNHANDLED(handled = false) | 192 IPC_MESSAGE_UNHANDLED(handled = false) |
| 204 IPC_END_MESSAGE_MAP_EX() | 193 IPC_END_MESSAGE_MAP_EX() |
| 205 return handled; | 194 return handled; |
| 206 } | 195 } |
| 207 | 196 |
| 208 void OnIDBKeysFromValuesAndKeyPathSucceeded( | 197 void OnIDBKeysFromValuesAndKeyPathSucceeded( |
| 209 int id, const std::vector<IndexedDBKey>& values) { | 198 int id, const std::vector<IndexedDBKey>& values) { |
| 210 EXPECT_EQ(expected_id_, id); | 199 EXPECT_EQ(expected_id_, id); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 } | 258 } |
| 270 | 259 |
| 271 void SetExpectedValue(const content::SerializedScriptValue& expected_value) { | 260 void SetExpectedValue(const content::SerializedScriptValue& expected_value) { |
| 272 key_path_helper_->SetExpectedValue(expected_value); | 261 key_path_helper_->SetExpectedValue(expected_value); |
| 273 } | 262 } |
| 274 | 263 |
| 275 void CheckValuesForKeyPath( | 264 void CheckValuesForKeyPath( |
| 276 int id, | 265 int id, |
| 277 const std::vector<content::SerializedScriptValue>& | 266 const std::vector<content::SerializedScriptValue>& |
| 278 serialized_script_values, | 267 serialized_script_values, |
| 279 const string16& key_path) { | 268 const IndexedDBKeyPath& key_path) { |
| 280 key_path_helper_->CheckValuesForKeyPath(id, serialized_script_values, | 269 key_path_helper_->CheckValuesForKeyPath(id, serialized_script_values, |
| 281 key_path); | 270 key_path); |
| 282 ui_test_utils::RunMessageLoop(); | 271 ui_test_utils::RunMessageLoop(); |
| 283 } | 272 } |
| 284 | 273 |
| 285 void CheckInjectValue(const IndexedDBKey& key, | 274 void CheckInjectValue(const IndexedDBKey& key, |
| 286 const content::SerializedScriptValue& value, | 275 const content::SerializedScriptValue& value, |
| 287 const string16& key_path) { | 276 const IndexedDBKeyPath& key_path) { |
| 288 key_path_helper_->CheckInjectValue(key, value, key_path); | 277 key_path_helper_->CheckInjectValue(key, value, key_path); |
| 289 ui_test_utils::RunMessageLoop(); | 278 ui_test_utils::RunMessageLoop(); |
| 290 } | 279 } |
| 291 | 280 |
| 292 private: | 281 private: |
| 293 scoped_refptr<IDBKeyPathHelper> key_path_helper_; | 282 scoped_refptr<IDBKeyPathHelper> key_path_helper_; |
| 294 }; | 283 }; |
| 295 | 284 |
| 296 // Cases: | 285 // Cases: |
| 297 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathExtract) { | 286 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathExtract) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 324 serialized_values.push_back(content::SerializedScriptValue( | 313 serialized_values.push_back(content::SerializedScriptValue( |
| 325 false, false, string16(data_object, arraysize(data_object)))); | 314 false, false, string16(data_object, arraysize(data_object)))); |
| 326 expected_keys.push_back(null_key); | 315 expected_keys.push_back(null_key); |
| 327 | 316 |
| 328 // keypath: "foo", value: null, expected: null | 317 // keypath: "foo", value: null, expected: null |
| 329 serialized_values.push_back( | 318 serialized_values.push_back( |
| 330 content::SerializedScriptValue(true, false, string16())); | 319 content::SerializedScriptValue(true, false, string16())); |
| 331 expected_keys.push_back(null_key); | 320 expected_keys.push_back(null_key); |
| 332 | 321 |
| 333 scoped_helper.SetExpectedKeys(kId, expected_keys, false); | 322 scoped_helper.SetExpectedKeys(kId, expected_keys, false); |
| 323 |
| 324 IndexedDBKeyPath key_path; |
| 325 key_path.SetString(UTF8ToUTF16("foo")); |
| 334 scoped_helper.CheckValuesForKeyPath( | 326 scoped_helper.CheckValuesForKeyPath( |
| 335 kId, serialized_values, UTF8ToUTF16("foo")); | 327 kId, serialized_values, key_path); |
| 336 } | 328 } |
| 337 | 329 |
| 338 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathPropertyNotAvailable) { | 330 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathPropertyNotAvailable) { |
| 339 ScopedIDBKeyPathHelper scoped_helper; | 331 ScopedIDBKeyPathHelper scoped_helper; |
| 340 const int kId = 7; | 332 const int kId = 7; |
| 341 std::vector<IndexedDBKey> expected_keys; | 333 std::vector<IndexedDBKey> expected_keys; |
| 342 IndexedDBKey null_value; | 334 IndexedDBKey null_value; |
| 343 null_value.SetNull(); | 335 null_value.SetNull(); |
| 344 expected_keys.push_back(null_value); | 336 expected_keys.push_back(null_value); |
| 345 expected_keys.push_back(null_value); | 337 expected_keys.push_back(null_value); |
| 346 | 338 |
| 347 scoped_helper.SetExpectedKeys(kId, expected_keys, false); | 339 scoped_helper.SetExpectedKeys(kId, expected_keys, false); |
| 348 | 340 |
| 349 std::vector<content::SerializedScriptValue> serialized_values; | 341 std::vector<content::SerializedScriptValue> serialized_values; |
| 350 // {foo: "zoo", bar: null} | 342 // {foo: "zoo", bar: null} |
| 351 char16 data[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x0353, 0x6162, | 343 char16 data[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x0353, 0x6162, |
| 352 0x3072, 0x027b}; | 344 0x3072, 0x027b}; |
| 353 serialized_values.push_back(content::SerializedScriptValue( | 345 serialized_values.push_back(content::SerializedScriptValue( |
| 354 false, false, string16(data, arraysize(data)))); | 346 false, false, string16(data, arraysize(data)))); |
| 355 | 347 |
| 356 // null | 348 // null |
| 357 serialized_values.push_back( | 349 serialized_values.push_back( |
| 358 content::SerializedScriptValue(true, false, string16())); | 350 content::SerializedScriptValue(true, false, string16())); |
| 359 | 351 |
| 360 scoped_helper.CheckValuesForKeyPath(kId, serialized_values, | 352 IndexedDBKeyPath key_path; |
| 361 UTF8ToUTF16("PropertyNotAvailable")); | 353 key_path.SetString(UTF8ToUTF16("PropertyNotAvailable")); |
| 354 scoped_helper.CheckValuesForKeyPath(kId, serialized_values, key_path); |
| 362 } | 355 } |
| 363 | 356 |
| 364 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathMultipleCalls) { | 357 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathMultipleCalls) { |
| 365 ScopedIDBKeyPathHelper scoped_helper; | 358 ScopedIDBKeyPathHelper scoped_helper; |
| 366 const int kId = 7; | 359 const int kId = 7; |
| 367 std::vector<IndexedDBKey> expected_keys; | 360 std::vector<IndexedDBKey> expected_keys; |
| 368 | 361 |
| 369 IndexedDBKey null_value; | 362 IndexedDBKey null_value; |
| 370 null_value.SetNull(); | 363 null_value.SetNull(); |
| 371 expected_keys.push_back(null_value); | 364 expected_keys.push_back(null_value); |
| 372 expected_keys.push_back(null_value); | 365 expected_keys.push_back(null_value); |
| 373 scoped_helper.SetExpectedKeys(kId, expected_keys, true); | 366 scoped_helper.SetExpectedKeys(kId, expected_keys, false); |
| 374 | 367 |
| 375 std::vector<content::SerializedScriptValue> serialized_values; | 368 std::vector<content::SerializedScriptValue> serialized_values; |
| 376 | 369 |
| 377 // {foo: "zoo", bar: null} | 370 // {foo: "zoo", bar: null} |
| 378 char16 data[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x0353, 0x6162, | 371 char16 data[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x0353, 0x6162, |
| 379 0x3072, 0x027b}; | 372 0x3072, 0x027b}; |
| 380 serialized_values.push_back(content::SerializedScriptValue( | 373 serialized_values.push_back(content::SerializedScriptValue( |
| 381 false, false, string16(data, arraysize(data)))); | 374 false, false, string16(data, arraysize(data)))); |
| 382 | 375 |
| 383 // null | 376 // null |
| 384 serialized_values.push_back( | 377 serialized_values.push_back( |
| 385 content::SerializedScriptValue(true, false, string16())); | 378 content::SerializedScriptValue(true, false, string16())); |
| 386 | 379 |
| 387 scoped_helper.CheckValuesForKeyPath(kId, serialized_values, | 380 IndexedDBKeyPath key_path; |
| 388 UTF8ToUTF16("!+Invalid[KeyPath[[[")); | 381 key_path.SetString(UTF8ToUTF16("PropertyNotAvailable")); |
| 382 scoped_helper.CheckValuesForKeyPath(kId, serialized_values, key_path); |
| 389 | 383 |
| 390 // Call again with the Utility process in batch mode and with valid keys. | 384 // Call again with the Utility process in batch mode and with valid keys. |
| 391 expected_keys.clear(); | 385 expected_keys.clear(); |
| 392 IndexedDBKey value; | 386 IndexedDBKey value; |
| 393 value.SetString(UTF8ToUTF16("zoo")); | 387 value.SetString(UTF8ToUTF16("zoo")); |
| 394 expected_keys.push_back(value); | 388 expected_keys.push_back(value); |
| 395 expected_keys.push_back(null_value); | 389 expected_keys.push_back(null_value); |
| 396 scoped_helper.SetExpectedKeys(kId + 1, expected_keys, false); | 390 scoped_helper.SetExpectedKeys(kId + 1, expected_keys, false); |
| 397 scoped_helper.CheckValuesForKeyPath(kId + 1, serialized_values, | 391 key_path.SetString(UTF8ToUTF16("foo")); |
| 398 UTF8ToUTF16("foo")); | 392 scoped_helper.CheckValuesForKeyPath(kId + 1, serialized_values, key_path); |
| 399 } | 393 } |
| 400 | 394 |
| 401 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, InjectIDBKey) { | 395 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, InjectIDBKey) { |
| 402 // {foo: 'zoo'} | 396 // {foo: 'zoo'} |
| 403 const char16 initial_data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b}; | 397 const char16 initial_data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b}; |
| 404 content::SerializedScriptValue value( | 398 content::SerializedScriptValue value( |
| 405 false, false, string16(initial_data, arraysize(initial_data))); | 399 false, false, string16(initial_data, arraysize(initial_data))); |
| 406 IndexedDBKey key; | 400 IndexedDBKey key; |
| 407 key.SetString(UTF8ToUTF16("myNewKey")); | 401 key.SetString(UTF8ToUTF16("myNewKey")); |
| 408 | 402 |
| 409 ScopedIDBKeyPathHelper scoped_helper; | 403 ScopedIDBKeyPathHelper scoped_helper; |
| 410 | 404 |
| 411 // {foo: 'zoo', bar: 'myNewKey'} | 405 // {foo: 'zoo', bar: 'myNewKey'} |
| 412 const char16 expected_data[] = {0x01ff, 0x003f, 0x3f6f, 0x5301, 0x6603, | 406 const char16 expected_data[] = {0x01ff, 0x003f, 0x3f6f, 0x5301, 0x6603, |
| 413 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, | 407 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, |
| 414 0x5301, 0x6203, 0x7261, 0x013f, 0x0853, | 408 0x5301, 0x6203, 0x7261, 0x013f, 0x0853, |
| 415 0x796d, 0x654e, 0x4b77, 0x7965, 0x027b}; | 409 0x796d, 0x654e, 0x4b77, 0x7965, 0x027b}; |
| 416 content::SerializedScriptValue expected_value( | 410 content::SerializedScriptValue expected_value( |
| 417 false, false, string16(expected_data, arraysize(expected_data))); | 411 false, false, string16(expected_data, arraysize(expected_data))); |
| 418 scoped_helper.SetExpectedValue(expected_value); | 412 scoped_helper.SetExpectedValue(expected_value); |
| 419 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("bar")); | 413 IndexedDBKeyPath key_path; |
| 414 key_path.SetString(UTF8ToUTF16("bar")); |
| 415 scoped_helper.CheckInjectValue(key, value, key_path); |
| 420 | 416 |
| 421 // Should fail - can't apply properties to string value of key foo | 417 // Should fail - can't apply properties to string value of key foo |
| 422 const content::SerializedScriptValue failure_value; | 418 const content::SerializedScriptValue failure_value; |
| 423 scoped_helper.SetExpectedValue(failure_value); | 419 scoped_helper.SetExpectedValue(failure_value); |
| 424 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("foo.bad.path")); | 420 key_path.SetString(UTF8ToUTF16("foo.bad.path")); |
| 421 scoped_helper.CheckInjectValue(key, value, key_path); |
| 425 | 422 |
| 426 // {foo: 'zoo', bar: {baz: 'myNewKey'}} | 423 // {foo: 'zoo', bar: {baz: 'myNewKey'}} |
| 427 const char16 expected_data2[] = {0x01ff, 0x003f, 0x3f6f, 0x5301, 0x6603, | 424 const char16 expected_data2[] = {0x01ff, 0x003f, 0x3f6f, 0x5301, 0x6603, |
| 428 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, | 425 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, |
| 429 0x5301, 0x6203, 0x7261, 0x013f, 0x3f6f, | 426 0x5301, 0x6203, 0x7261, 0x013f, 0x3f6f, |
| 430 0x5302, 0x6203, 0x7a61, 0x023f, 0x0853, | 427 0x5302, 0x6203, 0x7a61, 0x023f, 0x0853, |
| 431 0x796d, 0x654e, 0x4b77, 0x7965, 0x017b, | 428 0x796d, 0x654e, 0x4b77, 0x7965, 0x017b, |
| 432 0x027b}; | 429 0x027b}; |
| 433 content::SerializedScriptValue expected_value2( | 430 content::SerializedScriptValue expected_value2( |
| 434 false, false, string16(expected_data2, arraysize(expected_data2))); | 431 false, false, string16(expected_data2, arraysize(expected_data2))); |
| 435 scoped_helper.SetExpectedValue(expected_value2); | 432 scoped_helper.SetExpectedValue(expected_value2); |
| 436 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("bar.baz")); | 433 key_path.SetString(UTF8ToUTF16("bar.baz")); |
| 434 scoped_helper.CheckInjectValue(key, value, key_path); |
| 437 } | 435 } |
| OLD | NEW |