Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(645)

Side by Side Diff: content/browser/indexed_db/idbbindingutilities_browsertest.cc

Issue 9212038: Distinguish null IDBKey (no value) and invalid IDBKey (value is not valid key) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Re-enable IndexedDBUILayoutTest.LayoutTests Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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 }
OLDNEW
« no previous file with comments | « content/browser/in_process_webkit/indexed_db_uitest.cc ('k') | content/common/indexed_db/indexed_db_key.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698