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