#include "extensions/browser/browsertest_util.h"
#include <string>
#include "base/memory/ref_counted.h"
#include "base/strings/string_number_conversions.h"
#include "extensions/common/constants.h"
#include "extensions/common/extension.h"
#include "extensions/shell/test/shell_apitest.h"
#include "extensions/test/result_catcher.h"
#include "testing/gtest/include/gtest/gtest-spi.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace extensions {
namespace browsertest_util {
namespace {
class ExtensionBrowsertestUtilTest : public ShellApiTest {
public:
ExtensionBrowsertestUtilTest() = default;
ExtensionBrowsertestUtilTest(const ExtensionBrowsertestUtilTest&) = delete;
ExtensionBrowsertestUtilTest& operator=(const ExtensionBrowsertestUtilTest&) =
delete;
~ExtensionBrowsertestUtilTest() override = default;
void SetUpOnMainThread() override {
ShellApiTest::SetUpOnMainThread();
extension_ = LoadExtension("extension");
ASSERT_TRUE(extension_.get());
ResultCatcher catcher;
ASSERT_TRUE(catcher.GetNextResult());
}
protected:
const Extension* extension() const { return extension_.get(); }
private:
scoped_refptr<const Extension> extension_;
};
IN_PROC_BROWSER_TEST_F(ExtensionBrowsertestUtilTest,
ExecuteScriptInBackgroundPage) {
EXPECT_EQ(extension()->id(),
ExecuteScriptInBackgroundPage(
browser_context(), extension()->id(),
"chrome.test.sendScriptResult(chrome.runtime.id);"));
EXPECT_EQ("success",
ExecuteScriptInBackgroundPage(
browser_context(), extension()->id(),
R"(chrome.runtime.setUninstallURL('http://example.com',
function() {
chrome.test.sendScriptResult('success');
});)"));
EXPECT_EQ(3,
ExecuteScriptInBackgroundPage(browser_context(), extension()->id(),
"chrome.test.sendScriptResult(3);")
.GetInt());
}
IN_PROC_BROWSER_TEST_F(ExtensionBrowsertestUtilTest,
ExecuteScriptInBackgroundPageDeprecated) {
EXPECT_EQ(extension()->id(),
ExecuteScriptInBackgroundPageDeprecated(
browser_context(), extension()->id(),
"window.domAutomationController.send(chrome.runtime.id);"));
EXPECT_EQ(std::string("/") + extensions::kGeneratedBackgroundPageFilename,
ExecuteScriptInBackgroundPageDeprecated(
browser_context(), extension()->id(),
R"(chrome.runtime.getBackgroundPage(function(result) {
let url = new URL(result.location.href);
window.domAutomationController.send(url.pathname);
});)"));
EXPECT_NONFATAL_FAILURE(ExecuteScriptInBackgroundPageDeprecated(
browser_context(), extension()->id(),
"window.domAutomationController.send(3);"),
"send(3)");
}
IN_PROC_BROWSER_TEST_F(ExtensionBrowsertestUtilTest,
ExecuteScriptInBackgroundPageNoWait) {
ASSERT_TRUE(ExecuteScriptInBackgroundPageNoWait(
browser_context(), extension()->id(), "let foo = 0;"));
ResultCatcher catcher;
ASSERT_TRUE(ExecuteScriptInBackgroundPageNoWait(
browser_context(), extension()->id(), "chrome.test.notifyPass();"));
ASSERT_TRUE(catcher.GetNextResult());
EXPECT_NONFATAL_FAILURE(
EXPECT_FALSE(ExecuteScriptInBackgroundPageNoWait(
browser_context(), "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "")),
"No enabled extension with id: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}
}
}
}