bookmarklet_browsertest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/string_util.h" 6#include "content/public/browser/web_contents.h" 7#include "content/public/test/browser_test_utils.h" 8#include "content/public/test/test_utils.h" 9#include "content/shell/shell.h" 10#include "content/test/content_browser_test.h" 11#include "content/test/content_browser_test_utils.h" 12#include "testing/gtest/include/gtest/gtest.h" 13 14namespace content { 15 16class BookmarkletTest : public ContentBrowserTest { 17 public: 18 void NavigateToStartPage() { 19 NavigateToURL(shell(), GURL("data:text/html,start page")); 20 EXPECT_EQ("start page", GetBodyText()); 21 } 22 23 std::string GetBodyText() { 24 std::string body_text; 25 EXPECT_TRUE(ExecuteScriptAndExtractString( 26 shell()->web_contents(), 27 "window.domAutomationController.send(document.body.innerText);", 28 &body_text)); 29 return body_text; 30 } 31}; 32 33IN_PROC_BROWSER_TEST_F(BookmarkletTest, Redirect) { 34 NavigateToStartPage(); 35 36 NavigateToURL(shell(), GURL( 37 "javascript:location.href='data:text/plain,SUCCESS'")); 38 EXPECT_EQ("SUCCESS", GetBodyText()); 39} 40 41IN_PROC_BROWSER_TEST_F(BookmarkletTest, RedirectVoided) { 42 NavigateToStartPage(); 43 44 // This test should be redundant with the Redirect test above. The point 45 // here is to emphasize that in either case the assignment to location during 46 // the evaluation of the script should suppress loading the script result. 47 // Here, because of the void() wrapping there is no script result. 48 NavigateToURL(shell(), GURL( 49 "javascript:void(location.href='data:text/plain,SUCCESS')")); 50 EXPECT_EQ("SUCCESS", GetBodyText()); 51} 52 53// http://crbug.com/177957 54IN_PROC_BROWSER_TEST_F(BookmarkletTest, NonEmptyResult) { 55 NavigateToStartPage(); 56 // If there's no navigation, javascript: URLs are run synchronously. 57 shell()->LoadURL(GURL("javascript:'hello world'")); 58 59 EXPECT_EQ("hello world", GetBodyText()); 60} 61 62IN_PROC_BROWSER_TEST_F(BookmarkletTest, DocumentWrite) { 63 NavigateToStartPage(); 64 65 // If there's no navigation, javascript: URLs are run synchronously. 66 shell()->LoadURL(GURL( 67 "javascript:document.open();" 68 "document.write('hello world');" 69 "document.close();")); 70 EXPECT_EQ("hello world", GetBodyText()); 71} 72 73 74} // namespace content 75 76