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