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 19 matching lines...) Expand all Loading... |
30 | 30 |
31 ~ScopedShutdownWebKit() { | 31 ~ScopedShutdownWebKit() { |
32 WebKit::shutdown(); | 32 WebKit::shutdown(); |
33 } | 33 } |
34 | 34 |
35 private: | 35 private: |
36 DISALLOW_COPY_AND_ASSIGN(ScopedShutdownWebKit); | 36 DISALLOW_COPY_AND_ASSIGN(ScopedShutdownWebKit); |
37 }; | 37 }; |
38 | 38 |
39 // Sanity test, check the function call directly outside the sandbox. | 39 // Sanity test, check the function call directly outside the sandbox. |
40 // TODO(jsbell): Disabled to land WK76487; http://crbug.com/110956 has fix. | 40 TEST(IDBKeyPathWithoutSandbox, Value) { |
41 TEST(IDBKeyPathWithoutSandbox, DISABLED_Value) { | |
42 content::WebKitPlatformSupportImpl webkit_platform_support; | 41 content::WebKitPlatformSupportImpl webkit_platform_support; |
43 WebKit::initialize(&webkit_platform_support); | 42 WebKit::initialize(&webkit_platform_support); |
44 ScopedShutdownWebKit shutdown_webkit; | 43 ScopedShutdownWebKit shutdown_webkit; |
45 | 44 |
46 char16 data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b}; | 45 // {foo: "zoo"} |
| 46 char16 data_foo_zoo[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b}; |
47 std::vector<WebSerializedScriptValue> serialized_values; | 47 std::vector<WebSerializedScriptValue> serialized_values; |
48 serialized_values.push_back( | 48 serialized_values.push_back( |
49 WebSerializedScriptValue::fromString(string16(data, arraysize(data)))); | 49 WebSerializedScriptValue::fromString(string16(data_foo_zoo, |
| 50 arraysize(data_foo_zoo)))); |
| 51 |
| 52 // {foo: null} |
| 53 char16 data_foo_null[] = {0x0353, 0x6f66, 0x306f, 0x017b}; |
| 54 serialized_values.push_back(content::SerializedScriptValue( |
| 55 false, false, string16(data_foo_null, arraysize(data_foo_null)))); |
| 56 |
| 57 // {} |
| 58 char16 data_object[] = {0x017b}; |
| 59 serialized_values.push_back(content::SerializedScriptValue( |
| 60 false, false, string16(data_object, arraysize(data_object)))); |
| 61 |
| 62 // null |
50 serialized_values.push_back( | 63 serialized_values.push_back( |
51 WebSerializedScriptValue::fromString(string16())); | 64 WebSerializedScriptValue::fromString(string16())); |
52 | 65 |
53 std::vector<WebKit::WebIDBKey> values; | 66 std::vector<WebKit::WebIDBKey> values; |
54 string16 key_path(UTF8ToUTF16("foo")); | 67 string16 key_path; |
55 bool error = webkit_glue::IDBKeysFromValuesAndKeyPath( | 68 bool error; |
| 69 |
| 70 key_path = UTF8ToUTF16("foo"); |
| 71 error = webkit_glue::IDBKeysFromValuesAndKeyPath( |
56 serialized_values, key_path, &values); | 72 serialized_values, key_path, &values); |
57 | 73 |
58 ASSERT_EQ(size_t(2), values.size()); | 74 ASSERT_EQ(size_t(4), values.size()); |
59 ASSERT_EQ(WebKit::WebIDBKey::StringType, values[0].type()); | 75 ASSERT_EQ(WebKit::WebIDBKey::StringType, values[0].type()); |
60 ASSERT_EQ(UTF8ToUTF16("zoo"), values[0].string()); | 76 ASSERT_EQ(UTF8ToUTF16("zoo"), values[0].string()); |
61 ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[1].type()); | 77 ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[1].type()); |
| 78 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type()); |
| 79 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type()); |
62 ASSERT_FALSE(error); | 80 ASSERT_FALSE(error); |
63 | 81 |
64 values.clear(); | 82 values.clear(); |
65 key_path = UTF8ToUTF16("PropertyNotAvailable"); | 83 key_path = UTF8ToUTF16("PropertyNotAvailable"); |
66 error = webkit_glue::IDBKeysFromValuesAndKeyPath( | 84 error = webkit_glue::IDBKeysFromValuesAndKeyPath( |
67 serialized_values, key_path, &values); | 85 serialized_values, key_path, &values); |
68 | 86 |
69 ASSERT_EQ(size_t(2), values.size()); | 87 ASSERT_EQ(size_t(4), values.size()); |
70 ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[0].type()); | 88 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[0].type()); |
71 ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[1].type()); | 89 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[1].type()); |
| 90 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type()); |
| 91 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type()); |
72 ASSERT_FALSE(error); | 92 ASSERT_FALSE(error); |
73 | 93 |
74 values.clear(); | 94 values.clear(); |
75 key_path = UTF8ToUTF16("!+Invalid[KeyPath[[["); | 95 key_path = UTF8ToUTF16("!+Invalid[KeyPath[[["); |
76 error = webkit_glue::IDBKeysFromValuesAndKeyPath( | 96 error = webkit_glue::IDBKeysFromValuesAndKeyPath( |
77 serialized_values, key_path, &values); | 97 serialized_values, key_path, &values); |
78 | 98 |
79 ASSERT_TRUE(error); | 99 ASSERT_TRUE(error); |
80 ASSERT_EQ(size_t(2), values.size()); | 100 ASSERT_EQ(size_t(4), values.size()); |
81 ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[0].type()); | 101 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[0].type()); |
82 ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[1].type()); | 102 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[1].type()); |
| 103 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type()); |
| 104 ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type()); |
83 } | 105 } |
84 | 106 |
85 class IDBKeyPathHelper : public UtilityProcessHost::Client { | 107 class IDBKeyPathHelper : public UtilityProcessHost::Client { |
86 public: | 108 public: |
87 IDBKeyPathHelper() | 109 IDBKeyPathHelper() |
88 : expected_id_(0), | 110 : expected_id_(0), |
89 utility_process_host_(NULL), | 111 utility_process_host_(NULL), |
90 value_for_key_path_failed_(false) { | 112 value_for_key_path_failed_(false) { |
91 } | 113 } |
92 | 114 |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 const content::SerializedScriptValue& value, | 285 const content::SerializedScriptValue& value, |
264 const string16& key_path) { | 286 const string16& key_path) { |
265 key_path_helper_->CheckInjectValue(key, value, key_path); | 287 key_path_helper_->CheckInjectValue(key, value, key_path); |
266 ui_test_utils::RunMessageLoop(); | 288 ui_test_utils::RunMessageLoop(); |
267 } | 289 } |
268 | 290 |
269 private: | 291 private: |
270 scoped_refptr<IDBKeyPathHelper> key_path_helper_; | 292 scoped_refptr<IDBKeyPathHelper> key_path_helper_; |
271 }; | 293 }; |
272 | 294 |
| 295 // Cases: |
273 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathExtract) { | 296 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathExtract) { |
274 ScopedIDBKeyPathHelper scoped_helper; | 297 ScopedIDBKeyPathHelper scoped_helper; |
275 const int kId = 7; | 298 const int kId = 7; |
276 std::vector<IndexedDBKey> expected_keys; | 299 std::vector<IndexedDBKey> expected_keys; |
277 IndexedDBKey value; | 300 std::vector<content::SerializedScriptValue> serialized_values; |
278 value.SetString(UTF8ToUTF16("zoo")); | |
279 expected_keys.push_back(value); | |
280 | 301 |
281 IndexedDBKey invalid_value; | 302 IndexedDBKey string_zoo_key; |
282 invalid_value.SetInvalid(); | 303 string_zoo_key.SetString(UTF8ToUTF16("zoo")); |
283 expected_keys.push_back(invalid_value); | 304 IndexedDBKey null_key; |
| 305 null_key.SetNull(); |
| 306 IndexedDBKey invalid_key; |
| 307 invalid_key.SetInvalid(); |
| 308 |
| 309 // keypath: "foo", value: {foo: "zoo"}, expected: "zoo" |
| 310 char16 data_foo_zoo[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b}; |
| 311 serialized_values.push_back(content::SerializedScriptValue( |
| 312 false, false, string16(data_foo_zoo, arraysize(data_foo_zoo)))); |
| 313 expected_keys.push_back(string_zoo_key); |
| 314 |
| 315 // keypath: "foo", value: {foo: null}, expected: invalid |
| 316 char16 data_foo_null[] = {0x0353, 0x6f66, 0x306f, 0x017b}; |
| 317 serialized_values.push_back(content::SerializedScriptValue( |
| 318 false, false, string16(data_foo_null, arraysize(data_foo_null)))); |
| 319 expected_keys.push_back(invalid_key); |
| 320 |
| 321 // keypath: "foo", value: {}, expected: null |
| 322 char16 data_object[] = {0x017b}; |
| 323 serialized_values.push_back(content::SerializedScriptValue( |
| 324 false, false, string16(data_object, arraysize(data_object)))); |
| 325 expected_keys.push_back(null_key); |
| 326 |
| 327 // keypath: "foo", value: null, expected: null |
| 328 serialized_values.push_back( |
| 329 content::SerializedScriptValue(true, false, string16())); |
| 330 expected_keys.push_back(null_key); |
284 | 331 |
285 scoped_helper.SetExpectedKeys(kId, expected_keys, false); | 332 scoped_helper.SetExpectedKeys(kId, expected_keys, false); |
286 | |
287 char16 data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b}; | |
288 std::vector<content::SerializedScriptValue> serialized_values; | |
289 serialized_values.push_back(content::SerializedScriptValue( | |
290 false, false, string16(data, arraysize(data)))); | |
291 serialized_values.push_back( | |
292 content::SerializedScriptValue(true, false, string16())); | |
293 scoped_helper.CheckValuesForKeyPath( | 333 scoped_helper.CheckValuesForKeyPath( |
294 kId, serialized_values, UTF8ToUTF16("foo")); | 334 kId, serialized_values, UTF8ToUTF16("foo")); |
295 } | 335 } |
296 | 336 |
297 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathPropertyNotAvailable) { | 337 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathPropertyNotAvailable) { |
298 ScopedIDBKeyPathHelper scoped_helper; | 338 ScopedIDBKeyPathHelper scoped_helper; |
299 const int kId = 7; | 339 const int kId = 7; |
300 std::vector<IndexedDBKey> expected_keys; | 340 std::vector<IndexedDBKey> expected_keys; |
301 IndexedDBKey invalid_value; | 341 IndexedDBKey null_value; |
302 invalid_value.SetInvalid(); | 342 null_value.SetNull(); |
303 expected_keys.push_back(invalid_value); | 343 expected_keys.push_back(null_value); |
304 expected_keys.push_back(invalid_value); | 344 expected_keys.push_back(null_value); |
305 | 345 |
306 scoped_helper.SetExpectedKeys(kId, expected_keys, false); | 346 scoped_helper.SetExpectedKeys(kId, expected_keys, false); |
307 | 347 |
308 char16 data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b}; | |
309 std::vector<content::SerializedScriptValue> serialized_values; | 348 std::vector<content::SerializedScriptValue> serialized_values; |
| 349 // {foo: "zoo", bar: null} |
| 350 char16 data[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x0353, 0x6162, |
| 351 0x3072, 0x027b}; |
310 serialized_values.push_back(content::SerializedScriptValue( | 352 serialized_values.push_back(content::SerializedScriptValue( |
311 false, false, string16(data, arraysize(data)))); | 353 false, false, string16(data, arraysize(data)))); |
| 354 |
| 355 // null |
312 serialized_values.push_back( | 356 serialized_values.push_back( |
313 content::SerializedScriptValue(true, false, string16())); | 357 content::SerializedScriptValue(true, false, string16())); |
| 358 |
314 scoped_helper.CheckValuesForKeyPath(kId, serialized_values, | 359 scoped_helper.CheckValuesForKeyPath(kId, serialized_values, |
315 UTF8ToUTF16("PropertyNotAvailable")); | 360 UTF8ToUTF16("PropertyNotAvailable")); |
316 } | 361 } |
317 | 362 |
318 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathMultipleCalls) { | 363 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathMultipleCalls) { |
319 ScopedIDBKeyPathHelper scoped_helper; | 364 ScopedIDBKeyPathHelper scoped_helper; |
320 const int kId = 7; | 365 const int kId = 7; |
321 std::vector<IndexedDBKey> expected_keys; | 366 std::vector<IndexedDBKey> expected_keys; |
322 IndexedDBKey invalid_value; | |
323 invalid_value.SetInvalid(); | |
324 expected_keys.push_back(invalid_value); | |
325 expected_keys.push_back(invalid_value); | |
326 | 367 |
| 368 IndexedDBKey null_value; |
| 369 null_value.SetNull(); |
| 370 expected_keys.push_back(null_value); |
| 371 expected_keys.push_back(null_value); |
327 scoped_helper.SetExpectedKeys(kId, expected_keys, true); | 372 scoped_helper.SetExpectedKeys(kId, expected_keys, true); |
328 | 373 |
329 char16 data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b}; | |
330 std::vector<content::SerializedScriptValue> serialized_values; | 374 std::vector<content::SerializedScriptValue> serialized_values; |
| 375 |
| 376 // {foo: "zoo", bar: null} |
| 377 char16 data[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x0353, 0x6162, |
| 378 0x3072, 0x027b}; |
331 serialized_values.push_back(content::SerializedScriptValue( | 379 serialized_values.push_back(content::SerializedScriptValue( |
332 false, false, string16(data, arraysize(data)))); | 380 false, false, string16(data, arraysize(data)))); |
| 381 |
| 382 // null |
333 serialized_values.push_back( | 383 serialized_values.push_back( |
334 content::SerializedScriptValue(true, false, string16())); | 384 content::SerializedScriptValue(true, false, string16())); |
| 385 |
335 scoped_helper.CheckValuesForKeyPath(kId, serialized_values, | 386 scoped_helper.CheckValuesForKeyPath(kId, serialized_values, |
336 UTF8ToUTF16("!+Invalid[KeyPath[[[")); | 387 UTF8ToUTF16("!+Invalid[KeyPath[[[")); |
337 | 388 |
338 // Call again with the Utility process in batch mode and with valid keys. | 389 // Call again with the Utility process in batch mode and with valid keys. |
339 expected_keys.clear(); | 390 expected_keys.clear(); |
340 IndexedDBKey value; | 391 IndexedDBKey value; |
341 value.SetString(UTF8ToUTF16("zoo")); | 392 value.SetString(UTF8ToUTF16("zoo")); |
342 expected_keys.push_back(value); | 393 expected_keys.push_back(value); |
343 expected_keys.push_back(invalid_value); | 394 expected_keys.push_back(null_value); |
344 scoped_helper.SetExpectedKeys(kId + 1, expected_keys, false); | 395 scoped_helper.SetExpectedKeys(kId + 1, expected_keys, false); |
345 scoped_helper.CheckValuesForKeyPath(kId + 1, serialized_values, | 396 scoped_helper.CheckValuesForKeyPath(kId + 1, serialized_values, |
346 UTF8ToUTF16("foo")); | 397 UTF8ToUTF16("foo")); |
347 } | 398 } |
348 | 399 |
349 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, InjectIDBKey) { | 400 IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, InjectIDBKey) { |
350 // {foo: 'zoo'} | 401 // {foo: 'zoo'} |
351 const char16 initial_data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b}; | 402 const char16 initial_data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b}; |
352 content::SerializedScriptValue value( | 403 content::SerializedScriptValue value( |
353 false, false, string16(initial_data, arraysize(initial_data))); | 404 false, false, string16(initial_data, arraysize(initial_data))); |
(...skipping 22 matching lines...) Expand all Loading... |
376 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, | 427 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, |
377 0x5301, 0x6203, 0x7261, 0x013f, 0x3f6f, | 428 0x5301, 0x6203, 0x7261, 0x013f, 0x3f6f, |
378 0x5302, 0x6203, 0x7a61, 0x023f, 0x0853, | 429 0x5302, 0x6203, 0x7a61, 0x023f, 0x0853, |
379 0x796d, 0x654e, 0x4b77, 0x7965, 0x017b, | 430 0x796d, 0x654e, 0x4b77, 0x7965, 0x017b, |
380 0x027b}; | 431 0x027b}; |
381 content::SerializedScriptValue expected_value2( | 432 content::SerializedScriptValue expected_value2( |
382 false, false, string16(expected_data2, arraysize(expected_data2))); | 433 false, false, string16(expected_data2, arraysize(expected_data2))); |
383 scoped_helper.SetExpectedValue(expected_value2); | 434 scoped_helper.SetExpectedValue(expected_value2); |
384 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("bar.baz")); | 435 scoped_helper.CheckInjectValue(key, value, UTF8ToUTF16("bar.baz")); |
385 } | 436 } |
OLD | NEW |