
The methodology used to generate this CL is documented in https://crbug.com/1098010#c34. No-Try: true No-Presubmit: true Bug: 1098010 Change-Id: I8c0f009d16350271f07d8e5e561085822cc9dd27 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3895935 Owners-Override: Avi Drissman <avi@chromium.org> Reviewed-by: Mark Mentovai <mark@chromium.org> Commit-Queue: Mark Mentovai <mark@chromium.org> Auto-Submit: Avi Drissman <avi@chromium.org> Cr-Commit-Position: refs/heads/main@{#1047456}
81 lines
2.8 KiB
C++
81 lines
2.8 KiB
C++
// Copyright 2012 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "base/strings/string_util.h"
|
|
#include "base/strings/stringprintf.h"
|
|
#include "content/public/browser/web_contents.h"
|
|
#include "content/public/test/browser_test.h"
|
|
#include "content/public/test/browser_test_utils.h"
|
|
#include "content/public/test/content_browser_test.h"
|
|
#include "content/public/test/content_browser_test_utils.h"
|
|
#include "content/public/test/test_utils.h"
|
|
#include "content/shell/browser/shell.h"
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
|
|
|
namespace content {
|
|
|
|
class BookmarkletTest : public ContentBrowserTest {
|
|
protected:
|
|
void SetUpOnMainThread() override {
|
|
ASSERT_TRUE(embedded_test_server()->Start());
|
|
}
|
|
|
|
void NavigateToStartPage() {
|
|
EXPECT_TRUE(NavigateToURL(shell(), GURL("data:text/html,start page")));
|
|
EXPECT_EQ("start page", GetBodyText());
|
|
}
|
|
|
|
content::EvalJsResult GetBodyText() {
|
|
return EvalJs(shell(), "document.body.innerText");
|
|
}
|
|
};
|
|
|
|
IN_PROC_BROWSER_TEST_F(BookmarkletTest, Redirect) {
|
|
NavigateToStartPage();
|
|
|
|
const GURL redirect_url(embedded_test_server()->GetURL("/simple_page.html"));
|
|
const GURL url(base::StringPrintf("javascript:location.href='%s'",
|
|
redirect_url.spec().c_str()));
|
|
EXPECT_TRUE(
|
|
NavigateToURL(shell(), url, redirect_url /* expected_commit_url */));
|
|
EXPECT_EQ("Basic html test.", GetBodyText());
|
|
}
|
|
|
|
IN_PROC_BROWSER_TEST_F(BookmarkletTest, RedirectVoided) {
|
|
NavigateToStartPage();
|
|
|
|
// This test should be redundant with the Redirect test above. The point
|
|
// here is to emphasize that in either case the assignment to location during
|
|
// the evaluation of the script should suppress loading the script result.
|
|
// Here, because of the void() wrapping there is no script result.
|
|
const GURL redirect_url(embedded_test_server()->GetURL("/simple_page.html"));
|
|
const GURL url(base::StringPrintf("javascript:void(location.href='%s')",
|
|
redirect_url.spec().c_str()));
|
|
EXPECT_TRUE(
|
|
NavigateToURL(shell(), url, redirect_url /* expected_commit_url */));
|
|
EXPECT_EQ("Basic html test.", GetBodyText());
|
|
}
|
|
|
|
// http://crbug.com/177957
|
|
IN_PROC_BROWSER_TEST_F(BookmarkletTest, NonEmptyResult) {
|
|
NavigateToStartPage();
|
|
// If there's no navigation, javascript: URLs are run synchronously.
|
|
shell()->LoadURL(GURL("javascript:'hello world'"));
|
|
|
|
EXPECT_EQ("hello world", GetBodyText());
|
|
}
|
|
|
|
IN_PROC_BROWSER_TEST_F(BookmarkletTest, DocumentWrite) {
|
|
NavigateToStartPage();
|
|
|
|
// If there's no navigation, javascript: URLs are run synchronously.
|
|
shell()->LoadURL(GURL(
|
|
"javascript:document.open();"
|
|
"document.write('hello world');"
|
|
"document.close();"));
|
|
EXPECT_EQ("hello world", GetBodyText());
|
|
}
|
|
|
|
} // namespace content
|