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

Unified Diff: chrome/browser/extensions/api/declarative_content/declarative_content_apitest.cc

Issue 23874006: Add a function to send scripts from a browsertest to an extension's background page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/declarative_content/declarative_content_apitest.cc
diff --git a/chrome/browser/extensions/api/declarative_content/declarative_content_apitest.cc b/chrome/browser/extensions/api/declarative_content/declarative_content_apitest.cc
index 55e443ada315a2710c2688a0fa50544c97d6aa8b..21e389aaf7fc5a51228a31532ebc8591ff93df24 100644
--- a/chrome/browser/extensions/api/declarative_content/declarative_content_apitest.cc
+++ b/chrome/browser/extensions/api/declarative_content/declarative_content_apitest.cc
@@ -5,12 +5,14 @@
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_action_manager.h"
#include "chrome/browser/extensions/extension_apitest.h"
+#include "chrome/browser/extensions/extension_browsertest_util.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_test_message_listener.h"
#include "chrome/browser/extensions/test_extension_dir.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/extensions/features/feature_channel.h"
#include "content/public/test/browser_test_utils.h"
+#include "testing/gmock/include/gmock/gmock.h"
namespace extensions {
namespace {
@@ -114,57 +116,63 @@ IN_PROC_BROWSER_TEST_F(DeclarativeContentApiTest,
ext_dir_.WriteManifest(kDeclarativeContentManifest);
ext_dir_.WriteFile(
FILE_PATH_LITERAL("background.js"),
- "var declarative = chrome.declarative;\n"
- "\n"
"var PageStateMatcher = chrome.declarativeContent.PageStateMatcher;\n"
- "function NewPageStateMatcher(obj) {\n"
- " return new PageStateMatcher(obj);\n"
- "}\n"
- "\n"
- "chrome.test.runTests([\n"
- " function canonicalizesCss() {\n"
- " var psm = new PageStateMatcher(\n"
- " {css: [\"input[type='password']\"]});\n"
- " chrome.test.assertEq(['input[type=\"password\"]'], psm.css);\n"
- " chrome.test.succeed();\n"
- " },\n"
- "\n"
- " function throwsOnNonArrayCss() {\n"
- " chrome.test.assertThrows(NewPageStateMatcher,\n"
- " undefined,\n"
- " [{css: 'Not-an-array'}],\n"
- " /css.*Expected 'array'/);\n"
- " chrome.test.succeed();\n"
- " },\n"
- "\n"
- " function throwsOnNonStringCss() {\n"
- " chrome.test.assertThrows(NewPageStateMatcher,\n"
- " undefined,\n"
- " [{css: [null]}],\n"
- " /css\\.0.*Expected 'string'/);\n"
- " chrome.test.succeed();\n"
- " },\n"
- "\n"
- " function throwsOnBadCss() {\n"
- " chrome.test.assertThrows(NewPageStateMatcher,\n"
- " undefined,\n"
- " [{css: [\"input''\"]}],\n"
- " /valid.*: input''$/);\n"
- " chrome.test.succeed();\n"
- " },\n"
- "\n"
- " function throwsOnComplexSelector() {\n"
- " chrome.test.assertThrows(NewPageStateMatcher,\n"
- " undefined,\n"
- " [{css: [\"div input\"]}],\n"
- " /compound selector.*: div input$/);\n"
- " chrome.test.succeed();\n"
- " },\n"
- "]);\n"
- "\n");
- ResultCatcher catcher;
- ASSERT_TRUE(LoadExtension(ext_dir_.unpacked_path()));
- ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
+ "function Return(obj) {\n"
+ " window.domAutomationController.send('' + obj);\n"
+ "}\n");
+ const Extension* extension = LoadExtension(ext_dir_.unpacked_path());
+ ASSERT_TRUE(extension);
+
+ EXPECT_EQ("input[type=\"password\"]",
+ ExecuteScriptInBackgroundPage(
+ profile(),
+ extension->id(),
+ "var psm = new PageStateMatcher(\n"
+ " {css: [\"input[type='password']\"]});\n"
+ "Return(psm.css);"));
+
+ EXPECT_THAT(ExecuteScriptInBackgroundPage(
+ profile(),
+ extension->id(),
+ "try {\n"
+ " new PageStateMatcher({css: 'Not-an-array'});\n"
+ " Return('Failed to throw');\n"
+ "} catch (e) {\n"
+ " Return(e.message);\n"
+ "}\n"),
+ testing::ContainsRegex("css.*Expected 'array'"));
+ EXPECT_THAT(ExecuteScriptInBackgroundPage(
+ profile(),
+ extension->id(),
+ "try {\n"
+ " new PageStateMatcher({css: [null]});\n" // Not a string.
+ " Return('Failed to throw');\n"
+ "} catch (e) {\n"
+ " Return(e.message);\n"
+ "}\n"),
+ testing::ContainsRegex("css\\.0.*Expected 'string'"));
+ EXPECT_THAT(ExecuteScriptInBackgroundPage(
+ profile(),
+ extension->id(),
+ "try {\n"
+ // Invalid CSS:
+ " new PageStateMatcher({css: [\"input''\"]});\n"
+ " Return('Failed to throw');\n"
+ "} catch (e) {\n"
+ " Return(e.message);\n"
+ "}\n"),
+ testing::ContainsRegex("valid.*: input''$"));
+ EXPECT_THAT(ExecuteScriptInBackgroundPage(
+ profile(),
+ extension->id(),
+ "try {\n"
+ // "Complex" selector:
+ " new PageStateMatcher({css: ['div input']});\n"
+ " Return('Failed to throw');\n"
+ "} catch (e) {\n"
+ " Return(e.message);\n"
+ "}\n"),
+ testing::ContainsRegex("compound selector.*: div input$"));
}
} // namespace

Powered by Google App Engine
This is Rietveld 408576698