1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 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 5513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/app/chrome_command_ids.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/browser_proxy.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/tab_proxy.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui/ui_test.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/test/test_server.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char kTestHtml[] = "files/viewsource/test.html"; 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ViewSourceTest : public UITest { 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ViewSourceTest() 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : test_server_(net::TestServer::TYPE_HTTP, 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick FilePath(FILE_PATH_LITERAL("chrome/test/data"))) { 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool IsMenuCommandEnabled(int command) { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> window_proxy(automation()->GetBrowserWindow(0)); 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(window_proxy.get()); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!window_proxy.get()) 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool enabled; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(window_proxy->IsMenuCommandEnabled(command, &enabled)); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return enabled; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick net::TestServer test_server_; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This test renders a page in view-source and then checks to see if a cookie 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// set in the html was set successfully (it shouldn't because we rendered the 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// page in view source). 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Flaky; see http://crbug.com/72201. 42dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ViewSourceTest, FLAKY_DoesBrowserRenderInViewSource) { 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server_.Start()); 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string cookie = "viewsource_cookie"; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string cookie_data = "foo"; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our view-source test page. 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url(chrome::kViewSourceScheme + std::string(":") + 503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick test_server_.GetURL(kTestHtml).spec()); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab(GetActiveTab()); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab.get()); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(url)); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Try to retrieve the cookie that the page sets. It should not be there 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // (because we are in view-source mode). 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string cookie_found; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab->GetCookieByName(url, cookie, &cookie_found)); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_NE(cookie_data, cookie_found); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This test renders a page normally and then renders the same page in 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// view-source mode. This is done since we had a problem at one point during 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// implementation of the view-source: prefix being consumed (removed from the 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// URL) if the URL was not changed (apart from adding the view-source prefix) 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ViewSourceTest, DoesBrowserConsumeViewSourcePrefix) { 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server_.Start()); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to google.html. 703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url(test_server_.GetURL(kTestHtml)); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Then we navigate to the same url but with the "view-source:" prefix. 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url_viewsource(chrome::kViewSourceScheme + std::string(":") + 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.spec()); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url_viewsource); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The URL should still be prefixed with "view-source:". 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(url_viewsource.spec(), GetActiveTabURL().spec()); 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Make sure that when looking at the actual page, we can select "View Source" 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// from the menu. 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ViewSourceTest, ViewSourceInMenuEnabledOnANormalPage) { 853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server_.Start()); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url(test_server_.GetURL(kTestHtml)); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(IsMenuCommandEnabled(IDC_VIEW_SOURCE)); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Make sure that when looking at the page source, we can't select "View Source" 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// from the menu. 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Occasionally crashes on all platforms, see http://crbug.com/69249 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(ViewSourceTest, FLAKY_ViewSourceInMenuDisabledWhileViewingSource) { 983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server_.Start()); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url_viewsource(chrome::kViewSourceScheme + std::string(":") + 1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick test_server_.GetURL(kTestHtml).spec()); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url_viewsource); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(IsMenuCommandEnabled(IDC_VIEW_SOURCE)); 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 108