1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h"
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/tools/test_shell/test_shell_test.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BookmarkletTest : public TestShellTest {
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetUp() {
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    TestShellTest::SetUp();
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    test_shell_->LoadURL(GURL("data:text/html,start page"));
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    test_shell_->WaitTestFinished();
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarkletTest, Redirect) {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_shell_->LoadURL(
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GURL("javascript:location.href='data:text/plain,SUCCESS'"));
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_shell_->WaitTestFinished();
2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  string16 text = test_shell_->GetDocumentText();
3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ("SUCCESS", UTF16ToASCII(text));
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarkletTest, RedirectVoided) {
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This test should be redundant with the Redirect test above.  The point
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // here is to emphasize that in either case the assignment to location during
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the evaluation of the script should suppress loading the script result.
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Here, because of the void() wrapping there is no script result.
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_shell_->LoadURL(
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GURL("javascript:void(location.href='data:text/plain,SUCCESS')"));
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_shell_->WaitTestFinished();
4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  string16 text = test_shell_->GetDocumentText();
4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ("SUCCESS", UTF16ToASCII(text));
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarkletTest, NonEmptyResult) {
4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  string16 text;
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(darin): This test fails in a JSC build.  WebCore+JSC does not really
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // need to support this usage until WebCore supports javascript: URLs that
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // generate content (https://bugs.webkit.org/show_bug.cgi?id=14959).  It is
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // important to note that Safari does not support bookmarklets, and this is
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // really an edge case.  Our behavior with V8 is consistent with FF and IE.
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if 0
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_shell_->LoadURL(L"javascript:false");
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MessageLoop::current()->RunAllPending();
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  text = test_shell_->GetDocumentText();
5721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ("false", UTF16ToASCII(text));
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_shell_->LoadURL(GURL("javascript:'hello world'"));
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MessageLoop::current()->RunAllPending();
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  text = test_shell_->GetDocumentText();
6321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ("hello world", UTF16ToASCII(text));
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarkletTest, DocumentWrite) {
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_shell_->LoadURL(GURL(
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "javascript:document.open();"
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "document.write('hello world');"
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "document.close()"));
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MessageLoop::current()->RunAllPending();
7221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  string16 text = test_shell_->GetDocumentText();
7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ("hello world", UTF16ToASCII(text));
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
77