| Index: content/browser/indexed_db/idbbindingutilities_browsertest.cc
|
| diff --git a/content/browser/indexed_db/idbbindingutilities_browsertest.cc b/content/browser/indexed_db/idbbindingutilities_browsertest.cc
|
| index 0793e0bd94a184864441d9534a09b8f235674d7b..b47645faca5742fe650dfeb00dd5b2704ac16ccc 100644
|
| --- a/content/browser/indexed_db/idbbindingutilities_browsertest.cc
|
| +++ b/content/browser/indexed_db/idbbindingutilities_browsertest.cc
|
| @@ -37,28 +37,46 @@ class ScopedShutdownWebKit {
|
| };
|
|
|
| // Sanity test, check the function call directly outside the sandbox.
|
| -// TODO(jsbell): Disabled to land WK76487; http://crbug.com/110956 has fix.
|
| -TEST(IDBKeyPathWithoutSandbox, DISABLED_Value) {
|
| +TEST(IDBKeyPathWithoutSandbox, Value) {
|
| content::WebKitPlatformSupportImpl webkit_platform_support;
|
| WebKit::initialize(&webkit_platform_support);
|
| ScopedShutdownWebKit shutdown_webkit;
|
|
|
| - char16 data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b};
|
| + // {foo: "zoo"}
|
| + char16 data_foo_zoo[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b};
|
| std::vector<WebSerializedScriptValue> serialized_values;
|
| serialized_values.push_back(
|
| - WebSerializedScriptValue::fromString(string16(data, arraysize(data))));
|
| + WebSerializedScriptValue::fromString(string16(data_foo_zoo,
|
| + arraysize(data_foo_zoo))));
|
| +
|
| + // {foo: null}
|
| + char16 data_foo_null[] = {0x0353, 0x6f66, 0x306f, 0x017b};
|
| + serialized_values.push_back(content::SerializedScriptValue(
|
| + false, false, string16(data_foo_null, arraysize(data_foo_null))));
|
| +
|
| + // {}
|
| + char16 data_object[] = {0x017b};
|
| + serialized_values.push_back(content::SerializedScriptValue(
|
| + false, false, string16(data_object, arraysize(data_object))));
|
| +
|
| + // null
|
| serialized_values.push_back(
|
| WebSerializedScriptValue::fromString(string16()));
|
|
|
| std::vector<WebKit::WebIDBKey> values;
|
| - string16 key_path(UTF8ToUTF16("foo"));
|
| - bool error = webkit_glue::IDBKeysFromValuesAndKeyPath(
|
| + string16 key_path;
|
| + bool error;
|
| +
|
| + key_path = UTF8ToUTF16("foo");
|
| + error = webkit_glue::IDBKeysFromValuesAndKeyPath(
|
| serialized_values, key_path, &values);
|
|
|
| - ASSERT_EQ(size_t(2), values.size());
|
| + ASSERT_EQ(size_t(4), values.size());
|
| ASSERT_EQ(WebKit::WebIDBKey::StringType, values[0].type());
|
| ASSERT_EQ(UTF8ToUTF16("zoo"), values[0].string());
|
| ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[1].type());
|
| + ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type());
|
| + ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type());
|
| ASSERT_FALSE(error);
|
|
|
| values.clear();
|
| @@ -66,9 +84,11 @@ TEST(IDBKeyPathWithoutSandbox, DISABLED_Value) {
|
| error = webkit_glue::IDBKeysFromValuesAndKeyPath(
|
| serialized_values, key_path, &values);
|
|
|
| - ASSERT_EQ(size_t(2), values.size());
|
| - ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[0].type());
|
| - ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[1].type());
|
| + ASSERT_EQ(size_t(4), values.size());
|
| + ASSERT_EQ(WebKit::WebIDBKey::NullType, values[0].type());
|
| + ASSERT_EQ(WebKit::WebIDBKey::NullType, values[1].type());
|
| + ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type());
|
| + ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type());
|
| ASSERT_FALSE(error);
|
|
|
| values.clear();
|
| @@ -77,9 +97,11 @@ TEST(IDBKeyPathWithoutSandbox, DISABLED_Value) {
|
| serialized_values, key_path, &values);
|
|
|
| ASSERT_TRUE(error);
|
| - ASSERT_EQ(size_t(2), values.size());
|
| - ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[0].type());
|
| - ASSERT_EQ(WebKit::WebIDBKey::InvalidType, values[1].type());
|
| + ASSERT_EQ(size_t(4), values.size());
|
| + ASSERT_EQ(WebKit::WebIDBKey::NullType, values[0].type());
|
| + ASSERT_EQ(WebKit::WebIDBKey::NullType, values[1].type());
|
| + ASSERT_EQ(WebKit::WebIDBKey::NullType, values[2].type());
|
| + ASSERT_EQ(WebKit::WebIDBKey::NullType, values[3].type());
|
| }
|
|
|
| class IDBKeyPathHelper : public UtilityProcessHost::Client {
|
| @@ -270,26 +292,44 @@ class ScopedIDBKeyPathHelper {
|
| scoped_refptr<IDBKeyPathHelper> key_path_helper_;
|
| };
|
|
|
| +// Cases:
|
| IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathExtract) {
|
| ScopedIDBKeyPathHelper scoped_helper;
|
| const int kId = 7;
|
| std::vector<IndexedDBKey> expected_keys;
|
| - IndexedDBKey value;
|
| - value.SetString(UTF8ToUTF16("zoo"));
|
| - expected_keys.push_back(value);
|
| + std::vector<content::SerializedScriptValue> serialized_values;
|
|
|
| - IndexedDBKey invalid_value;
|
| - invalid_value.SetInvalid();
|
| - expected_keys.push_back(invalid_value);
|
| + IndexedDBKey string_zoo_key;
|
| + string_zoo_key.SetString(UTF8ToUTF16("zoo"));
|
| + IndexedDBKey null_key;
|
| + null_key.SetNull();
|
| + IndexedDBKey invalid_key;
|
| + invalid_key.SetInvalid();
|
|
|
| - scoped_helper.SetExpectedKeys(kId, expected_keys, false);
|
| + // keypath: "foo", value: {foo: "zoo"}, expected: "zoo"
|
| + char16 data_foo_zoo[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b};
|
| + serialized_values.push_back(content::SerializedScriptValue(
|
| + false, false, string16(data_foo_zoo, arraysize(data_foo_zoo))));
|
| + expected_keys.push_back(string_zoo_key);
|
|
|
| - char16 data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b};
|
| - std::vector<content::SerializedScriptValue> serialized_values;
|
| + // keypath: "foo", value: {foo: null}, expected: invalid
|
| + char16 data_foo_null[] = {0x0353, 0x6f66, 0x306f, 0x017b};
|
| serialized_values.push_back(content::SerializedScriptValue(
|
| - false, false, string16(data, arraysize(data))));
|
| + false, false, string16(data_foo_null, arraysize(data_foo_null))));
|
| + expected_keys.push_back(invalid_key);
|
| +
|
| + // keypath: "foo", value: {}, expected: null
|
| + char16 data_object[] = {0x017b};
|
| + serialized_values.push_back(content::SerializedScriptValue(
|
| + false, false, string16(data_object, arraysize(data_object))));
|
| + expected_keys.push_back(null_key);
|
| +
|
| + // keypath: "foo", value: null, expected: null
|
| serialized_values.push_back(
|
| content::SerializedScriptValue(true, false, string16()));
|
| + expected_keys.push_back(null_key);
|
| +
|
| + scoped_helper.SetExpectedKeys(kId, expected_keys, false);
|
| scoped_helper.CheckValuesForKeyPath(
|
| kId, serialized_values, UTF8ToUTF16("foo"));
|
| }
|
| @@ -298,19 +338,24 @@ IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathPropertyNotAvailable) {
|
| ScopedIDBKeyPathHelper scoped_helper;
|
| const int kId = 7;
|
| std::vector<IndexedDBKey> expected_keys;
|
| - IndexedDBKey invalid_value;
|
| - invalid_value.SetInvalid();
|
| - expected_keys.push_back(invalid_value);
|
| - expected_keys.push_back(invalid_value);
|
| + IndexedDBKey null_value;
|
| + null_value.SetNull();
|
| + expected_keys.push_back(null_value);
|
| + expected_keys.push_back(null_value);
|
|
|
| scoped_helper.SetExpectedKeys(kId, expected_keys, false);
|
|
|
| - char16 data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b};
|
| std::vector<content::SerializedScriptValue> serialized_values;
|
| + // {foo: "zoo", bar: null}
|
| + char16 data[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x0353, 0x6162,
|
| + 0x3072, 0x027b};
|
| serialized_values.push_back(content::SerializedScriptValue(
|
| false, false, string16(data, arraysize(data))));
|
| +
|
| + // null
|
| serialized_values.push_back(
|
| content::SerializedScriptValue(true, false, string16()));
|
| +
|
| scoped_helper.CheckValuesForKeyPath(kId, serialized_values,
|
| UTF8ToUTF16("PropertyNotAvailable"));
|
| }
|
| @@ -319,19 +364,25 @@ IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathMultipleCalls) {
|
| ScopedIDBKeyPathHelper scoped_helper;
|
| const int kId = 7;
|
| std::vector<IndexedDBKey> expected_keys;
|
| - IndexedDBKey invalid_value;
|
| - invalid_value.SetInvalid();
|
| - expected_keys.push_back(invalid_value);
|
| - expected_keys.push_back(invalid_value);
|
|
|
| + IndexedDBKey null_value;
|
| + null_value.SetNull();
|
| + expected_keys.push_back(null_value);
|
| + expected_keys.push_back(null_value);
|
| scoped_helper.SetExpectedKeys(kId, expected_keys, true);
|
|
|
| - char16 data[] = {0x0353,0x6f66,0x536f,0x7a03,0x6f6f,0x017b};
|
| std::vector<content::SerializedScriptValue> serialized_values;
|
| +
|
| + // {foo: "zoo", bar: null}
|
| + char16 data[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x0353, 0x6162,
|
| + 0x3072, 0x027b};
|
| serialized_values.push_back(content::SerializedScriptValue(
|
| false, false, string16(data, arraysize(data))));
|
| +
|
| + // null
|
| serialized_values.push_back(
|
| content::SerializedScriptValue(true, false, string16()));
|
| +
|
| scoped_helper.CheckValuesForKeyPath(kId, serialized_values,
|
| UTF8ToUTF16("!+Invalid[KeyPath[[["));
|
|
|
| @@ -340,7 +391,7 @@ IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, IDBKeyPathMultipleCalls) {
|
| IndexedDBKey value;
|
| value.SetString(UTF8ToUTF16("zoo"));
|
| expected_keys.push_back(value);
|
| - expected_keys.push_back(invalid_value);
|
| + expected_keys.push_back(null_value);
|
| scoped_helper.SetExpectedKeys(kId + 1, expected_keys, false);
|
| scoped_helper.CheckValuesForKeyPath(kId + 1, serialized_values,
|
| UTF8ToUTF16("foo"));
|
|
|