summaryrefslogtreecommitdiffstats
path: root/content/browser/database_browsertest.cc
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-22 21:44:07 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-22 21:44:07 +0000
commit81702c8c3ee565331fc6b87dbb4ee1983fe5cb69 (patch)
tree3865f033be7f61d11ea13501bd393fb34f565b5d /content/browser/database_browsertest.cc
parentd8578f5fab11238d3fc07ac53bad6e38796fa802 (diff)
downloadchromium_src-81702c8c3ee565331fc6b87dbb4ee1983fe5cb69.zip
chromium_src-81702c8c3ee565331fc6b87dbb4ee1983fe5cb69.tar.gz
chromium_src-81702c8c3ee565331fc6b87dbb4ee1983fe5cb69.tar.bz2
Convert the Web SQL Database pyauto test to content_browsertests.
BUG=143637 Review URL: https://chromiumcodereview.appspot.com/10879018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152821 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/database_browsertest.cc')
-rw-r--r--content/browser/database_browsertest.cc267
1 files changed, 267 insertions, 0 deletions
diff --git a/content/browser/database_browsertest.cc b/content/browser/database_browsertest.cc
new file mode 100644
index 0000000..eb380a4
--- /dev/null
+++ b/content/browser/database_browsertest.cc
@@ -0,0 +1,267 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/string_number_conversions.h"
+#include "base/utf_string_conversions.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/download_manager.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_types.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_utils.h"
+#include "content/shell/shell.h"
+#include "content/test/content_browser_test.h"
+#include "content/test/content_browser_test_utils.h"
+#include "content/test/net/url_request_mock_http_job.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+class DatabaseTest : public ContentBrowserTest {
+ public:
+ DatabaseTest() {}
+
+ void RunScriptAndCheckResult(Shell* shell,
+ const std::string& script,
+ const std::string& result) {
+ std::string data;
+ ASSERT_TRUE(content::ExecuteJavaScriptAndExtractString(
+ shell->web_contents()->GetRenderViewHost(), L"",
+ ASCIIToWide(script), &data));
+ ASSERT_EQ(data, result);
+ }
+
+ void Navigate(Shell* shell) {
+ NavigateToURL(shell, GetTestUrl("", "simple_database.html"));
+ }
+
+ void CreateTable(Shell* shell) {
+ RunScriptAndCheckResult(shell, "createTable()", "done");
+ }
+
+ void InsertRecord(Shell* shell, const std::string& data) {
+ RunScriptAndCheckResult(shell, "insertRecord('" + data + "')", "done");
+ }
+
+ void UpdateRecord(Shell* shell, int index, const std::string& data) {
+ RunScriptAndCheckResult(
+ shell, "updateRecord(" + base::IntToString(index) + ", '" + data + "')",
+ "done");
+ }
+
+ void DeleteRecord(Shell* shell, int index) {
+ RunScriptAndCheckResult(
+ shell, "deleteRecord(" + base::IntToString(index) + ")", "done");
+ }
+
+ void CompareRecords(Shell* shell, const std::string& expected) {
+ RunScriptAndCheckResult(shell, "getRecords()", expected);
+ }
+
+ bool HasTable(Shell* shell) {
+ std::string data;
+ CHECK(content::ExecuteJavaScriptAndExtractString(
+ shell->web_contents()->GetRenderViewHost(), L"",
+ ASCIIToWide("getRecords()"), &data));
+ return data != "getRecords error: [object SQLError]";
+ }
+};
+
+// Insert records to the database.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, InsertRecord) {
+ Navigate(shell());
+ CreateTable(shell());
+ InsertRecord(shell(), "text");
+ CompareRecords(shell(), "text");
+ InsertRecord(shell(), "text2");
+ CompareRecords(shell(), "text, text2");
+}
+
+// Update records in the database.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, UpdateRecord) {
+ Navigate(shell());
+ CreateTable(shell());
+ InsertRecord(shell(), "text");
+ UpdateRecord(shell(), 0, "0");
+ CompareRecords(shell(), "0");
+
+ InsertRecord(shell(), "1");
+ InsertRecord(shell(), "2");
+ UpdateRecord(shell(), 1, "1000");
+ CompareRecords(shell(), "0, 1000, 2");
+}
+
+// Delete records in the database.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, DeleteRecord) {
+ Navigate(shell());
+ CreateTable(shell());
+ InsertRecord(shell(), "text");
+ DeleteRecord(shell(), 0);
+ CompareRecords(shell(), "");
+
+ InsertRecord(shell(), "0");
+ InsertRecord(shell(), "1");
+ InsertRecord(shell(), "2");
+ DeleteRecord(shell(), 1);
+ CompareRecords(shell(), "0, 2");
+}
+
+// Attempts to delete a nonexistent row in the table.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, DeleteNonexistentRow) {
+ Navigate(shell());
+ CreateTable(shell());
+ InsertRecord(shell(), "text");
+
+ RunScriptAndCheckResult(
+ shell(), "deleteRecord(1)", "could not find row with index: 1");
+
+ CompareRecords(shell(), "text");
+}
+
+// Insert, update, and delete records in the database.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, DatabaseOperations) {
+ Navigate(shell());
+ CreateTable(shell());
+
+ std::string expected;
+ for (int i = 0; i < 10; ++i) {
+ std::string item = base::IntToString(i);
+ InsertRecord(shell(), item);
+ if (!expected.empty())
+ expected += ", ";
+ expected += item;
+ }
+ CompareRecords(shell(), expected);
+
+ expected.clear();
+ for (int i = 0; i < 10; ++i) {
+ std::string item = base::IntToString(i * i);
+ UpdateRecord(shell(), i, item);
+ if (!expected.empty())
+ expected += ", ";
+ expected += item;
+ }
+ CompareRecords(shell(), expected);
+
+ for (int i = 0; i < 10; ++i)
+ DeleteRecord(shell(), 0);
+
+ CompareRecords(shell(), "");
+
+ RunScriptAndCheckResult(
+ shell(), "deleteRecord(1)", "could not find row with index: 1");
+
+ CompareRecords(shell(), "");
+}
+
+// Create records in the database and verify they persist after reload.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, ReloadPage) {
+ Navigate(shell());
+ CreateTable(shell());
+ InsertRecord(shell(), "text");
+
+ WindowedNotificationObserver load_stop_observer(
+ NOTIFICATION_LOAD_STOP,
+ NotificationService::AllSources());
+ shell()->Reload();
+ load_stop_observer.Wait();
+
+ CompareRecords(shell(), "text");
+}
+
+// Attempt to read a database created in a regular browser from an off the
+// record browser.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, OffTheRecordCannotReadRegularDatabase) {
+ Navigate(shell());
+ CreateTable(shell());
+ InsertRecord(shell(), "text");
+
+ Shell* otr = CreateOffTheRecordBrowser();
+ Navigate(otr);
+ ASSERT_FALSE(HasTable(otr));
+
+ CreateTable(otr);
+ CompareRecords(otr, "");
+}
+
+// Attempt to read a database created in an off the record browser from a
+// regular browser.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, RegularCannotReadOffTheRecordDatabase) {
+ Shell* otr = CreateOffTheRecordBrowser();
+ Navigate(otr);
+ CreateTable(otr);
+ InsertRecord(otr, "text");
+
+ Navigate(shell());
+ ASSERT_FALSE(HasTable(shell()));
+ CreateTable(shell());
+ CompareRecords(shell(), "");
+}
+
+// Verify DB changes within first window are present in the second window.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, ModificationPersistInSecondTab) {
+ Navigate(shell());
+ CreateTable(shell());
+ InsertRecord(shell(), "text");
+
+ Shell* shell2 = CreateBrowser();
+ Navigate(shell2);
+ UpdateRecord(shell2, 0, "0");
+
+ CompareRecords(shell(), "0");
+ CompareRecords(shell2, "0");
+}
+
+// Verify database modifications persist after restarting browser.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, PRE_DatabasePersistsAfterRelaunch) {
+ Navigate(shell());
+ CreateTable(shell());
+ InsertRecord(shell(), "text");
+}
+
+IN_PROC_BROWSER_TEST_F(DatabaseTest, DatabasePersistsAfterRelaunch) {
+ Navigate(shell());
+ CompareRecords(shell(), "text");
+}
+
+// Verify OTR database is removed after OTR window closes.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, PRE_OffTheRecordDatabaseNotPersistent) {
+ Shell* otr = CreateOffTheRecordBrowser();
+ Navigate(otr);
+ CreateTable(otr);
+ InsertRecord(otr, "text");
+}
+
+IN_PROC_BROWSER_TEST_F(DatabaseTest, OffTheRecordDatabaseNotPersistent) {
+ Shell* otr = CreateOffTheRecordBrowser();
+ Navigate(otr);
+ ASSERT_FALSE(HasTable(otr));
+}
+
+// Verify database modifications persist after crashing window.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, ModificationsPersistAfterRendererCrash) {
+ Navigate(shell());
+ CreateTable(shell());
+ InsertRecord(shell(), "1");
+
+ CrashTab(shell()->web_contents());
+ Navigate(shell());
+ CompareRecords(shell(), "1");
+}
+
+// Test to check if database modifications are persistent across windows in
+// off the record window.
+IN_PROC_BROWSER_TEST_F(DatabaseTest, OffTheRecordDBPersistentAcrossWindows) {
+ Shell* otr1 = CreateOffTheRecordBrowser();
+ Navigate(otr1);
+ CreateTable(otr1);
+ InsertRecord(otr1, "text");
+
+ Shell* otr2 = CreateOffTheRecordBrowser();
+ Navigate(otr2);
+ CompareRecords(otr2, "text");
+}
+
+} // namespace content