172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 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 "chrome/browser/printing/print_dialog_cloud.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/printing/print_dialog_cloud_internal.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string> 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <vector> 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/weak_ptr.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/values.h" 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/printing/cloud_print/cloud_print_url.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h" 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_details.h" 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_source.h" 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gmock/include/gmock/gmock.h" 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::A; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::AtLeast; 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::Eq; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::HasSubstr; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::IsNull; 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::NotNull; 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::Return; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::StrEq; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::_; 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char* const kPDFTestFile = "printing/cloud_print_unittest.pdf"; 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char* const kEmptyPDFTestFile = 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "printing/cloud_print_emptytest.pdf"; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char* const kMockJobTitle = "Mock Job Title"; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFilePath GetTestDataFileName() { 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_data_directory; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_file = test_data_directory.AppendASCII(kPDFTestFile); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return test_file; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFilePath GetEmptyDataFileName() { 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_data_directory; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_file = test_data_directory.AppendASCII(kEmptyPDFTestFile); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return test_file; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchar* GetTestData() { 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static std::string sTestFileData; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (sTestFileData.empty()) { 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_file = GetTestDataFileName(); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch file_util::ReadFileToString(test_file, &sTestFileData); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return &sTestFileData[0]; 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochMATCHER_P(StringValueEq, expected, "StringValue") { 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (expected->Equals(&arg)) 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string expected_string, arg_string; 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch expected->GetAsString(&expected_string); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg.GetAsString(&arg_string); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *result_listener << "'" << arg_string 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << "' (expected '" << expected_string << "')"; 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace internal_cloud_print_helpers { 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockCloudPrintFlowHandler 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : public CloudPrintFlowHandler, 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public base::SupportsWeakPtr<MockCloudPrintFlowHandler> { 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit MockCloudPrintFlowHandler(const FilePath& path, 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const string16& title, 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& file_type) 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : CloudPrintFlowHandler(path, title, file_type) {} 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD0(DestructorCalled, void()); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD0(RegisterMessages, void()); 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD3(Observe, 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(NotificationType type, 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details)); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD1(SetDialogDelegate, 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(CloudPrintHtmlDialogDelegate* delegate)); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD0(CreateCloudPrintDataSender, 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<CloudPrintDataSender>()); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockCloudPrintHtmlDialogDelegate : public CloudPrintHtmlDialogDelegate { 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD0(IsDialogModal, 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool()); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD0(GetDialogTitle, 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring()); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD0(GetDialogContentURL, 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL()); 10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MOCK_CONST_METHOD1(GetWebUIMessageHandlers, 10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void(std::vector<WebUIMessageHandler*>* handlers)); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD1(GetDialogSize, 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(gfx::Size* size)); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD0(GetDialogArgs, 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string()); 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD1(OnDialogClosed, 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(const std::string& json_retval)); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD2(OnCloseContents, 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(TabContents* source, bool *out_close_dialog)); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace internal_cloud_print_helpers 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing internal_cloud_print_helpers::CloudPrintDataSenderHelper; 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing internal_cloud_print_helpers::CloudPrintDataSender; 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockExternalHtmlDialogUI : public ExternalHtmlDialogUI { 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD1(RenderViewCreated, 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(RenderViewHost* render_view_host)); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockCloudPrintDataSenderHelper : public CloudPrintDataSenderHelper { 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(scottbyer): At some point this probably wants to use a 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // MockTabContents instead of NULL, and to pre-load it with a bunch 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // of expects/results. 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockCloudPrintDataSenderHelper() : CloudPrintDataSenderHelper(NULL) {} 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD1(CallJavascriptFunction, void(const std::wstring&)); 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD2(CallJavascriptFunction, void(const std::wstring&, 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const Value& arg1)); 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD3(CallJavascriptFunction, void(const std::wstring&, 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const Value& arg1, 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const Value& arg2)); 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CloudPrintURLTest : public testing::Test { 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CloudPrintURLTest() {} 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_.reset(new TestingProfile()); 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<Profile> profile_; 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintURLTest, CheckDefaultURLs) { 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string service_url = 1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CloudPrintURL(profile_.get()). 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetCloudPrintServiceURL().spec(); 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(service_url, HasSubstr("www.google.com")); 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(service_url, HasSubstr("cloudprint")); 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string dialog_url = 1653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CloudPrintURL(profile_.get()). 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetCloudPrintServiceDialogURL().spec(); 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("www.google.com")); 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/cloudprint/")); 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/client/")); 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, Not(HasSubstr("cloudprint/cloudprint"))); 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/dialog.html")); 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Repeat to make sure there isn't a transient glitch. 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dialog_url = 1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CloudPrintURL(profile_.get()). 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetCloudPrintServiceDialogURL().spec(); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("www.google.com")); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/cloudprint/")); 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/client/")); 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, Not(HasSubstr("cloudprint/cloudprint"))); 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/dialog.html")); 182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 183731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string manage_url = 184731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick CloudPrintURL(profile_.get()). 185731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetCloudPrintServiceManageURL().spec(); 186731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_THAT(manage_url, HasSubstr("www.google.com")); 187731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_THAT(manage_url, HasSubstr("/cloudprint/")); 188731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_THAT(manage_url, Not(HasSubstr("/client/"))); 189731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_THAT(manage_url, Not(HasSubstr("cloudprint/cloudprint"))); 190731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_THAT(manage_url, HasSubstr("/manage")); 191201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 192201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL learn_more_url = CloudPrintURL::GetCloudPrintLearnMoreURL(); 193201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string learn_more_path = learn_more_url.spec(); 194201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_THAT(learn_more_path, HasSubstr("www.google.com")); 195201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_THAT(learn_more_path, HasSubstr("/support/")); 196201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_THAT(learn_more_path, HasSubstr("/cloudprint")); 197201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(learn_more_url.has_path()); 198201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(learn_more_url.has_query()); 199201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 200201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL test_page_url = CloudPrintURL::GetCloudPrintTestPageURL(); 201201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string test_page_path = test_page_url.spec(); 202201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_THAT(test_page_path, HasSubstr("www.google.com")); 203201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_THAT(test_page_path, HasSubstr("/landing/")); 204201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_THAT(test_page_path, HasSubstr("/cloudprint/")); 205201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(test_page_url.has_path()); 206201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(test_page_url.has_query()); 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Testing for CloudPrintDataSender needs a mock WebUI. 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CloudPrintDataSenderTest : public testing::Test { 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CloudPrintDataSenderTest() 213731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : file_thread_(BrowserThread::FILE, &message_loop_), 214731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick io_thread_(BrowserThread::IO, &message_loop_) {} 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 mock_job_title(ASCIIToUTF16(kMockJobTitle)); 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mock_helper_.reset(new MockCloudPrintDataSenderHelper); 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch print_data_sender_ = 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new CloudPrintDataSender(mock_helper_.get(), 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_job_title, 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string("application/pdf")); 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<CloudPrintDataSender> print_data_sender_; 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<MockCloudPrintDataSenderHelper> mock_helper_; 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop message_loop_; 230731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread file_thread_; 231731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread io_thread_; 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(scottbyer): DISABLED until the binary test file can get 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// checked in separate from the patch. 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintDataSenderTest, CanSend) { 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StringValue mock_job_title(kMockJobTitle); 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_helper_, 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CallJavascriptFunction(_, _, StringValueEq(&mock_job_title))). 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WillOnce(Return()); 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_data_file_name = GetTestDataFileName(); 243731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 244731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NewRunnableMethod( 245731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick print_data_sender_.get(), 246731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &CloudPrintDataSender::ReadPrintDataFile, 247731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick test_data_file_name)); 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintDataSenderTest, BadFile) { 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_helper_, CallJavascriptFunction(_, _, _)).Times(0); 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath bad_data_file_name(L"/some/file/that/isnot/there"); 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath bad_data_file_name("/some/file/that/isnot/there"); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 259731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 260731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NewRunnableMethod( 261731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick print_data_sender_.get(), 262731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &CloudPrintDataSender::ReadPrintDataFile, 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bad_data_file_name)); 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintDataSenderTest, EmptyFile) { 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_helper_, CallJavascriptFunction(_, _, _)).Times(0); 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath empty_data_file_name = GetEmptyDataFileName(); 271731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 272731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NewRunnableMethod( 273731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick print_data_sender_.get(), 274731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &CloudPrintDataSender::ReadPrintDataFile, 275731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick empty_data_file_name)); 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Testing for CloudPrintFlowHandler needs a mock 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CloudPrintHtmlDialogDelegate, mock CloudPrintDataSender, and a mock 28172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// WebUI. 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Testing for CloudPrintHtmlDialogDelegate needs a mock 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CloudPrintFlowHandler. 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing internal_cloud_print_helpers::MockCloudPrintFlowHandler; 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing internal_cloud_print_helpers::CloudPrintHtmlDialogDelegate; 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CloudPrintHtmlDialogDelegateTest : public testing::Test { 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CloudPrintHtmlDialogDelegateTest() 292731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : ui_thread_(BrowserThread::UI, &message_loop_) {} 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath mock_path; 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 mock_title; 298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string mock_file_type; 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockCloudPrintFlowHandler* handler = 300ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new MockCloudPrintFlowHandler(mock_path, mock_title, mock_file_type); 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mock_flow_handler_ = handler->AsWeakPtr(); 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_flow_handler_.get(), SetDialogDelegate(_)); 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_flow_handler_.get(), SetDialogDelegate(NULL)); 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_.reset(new CloudPrintHtmlDialogDelegate( 30572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen mock_flow_handler_.get(), 100, 100, std::string(), true)); 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TearDown() { 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_.reset(); 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (mock_flow_handler_) 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete mock_flow_handler_.get(); 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoopForUI message_loop_; 315731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread ui_thread_; 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::WeakPtr<MockCloudPrintFlowHandler> mock_flow_handler_; 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<CloudPrintHtmlDialogDelegate> delegate_; 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintHtmlDialogDelegateTest, BasicChecks) { 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(delegate_->IsDialogModal()); 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(delegate_->GetDialogContentURL().spec(), 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StrEq(chrome::kCloudPrintResourcesURL)); 324513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(delegate_->GetDialogTitle().empty()); 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool close_dialog = false; 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->OnCloseContents(NULL, &close_dialog); 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(close_dialog); 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintHtmlDialogDelegateTest, OwnedFlowDestroyed) { 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_.reset(); 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(mock_flow_handler_.get(), IsNull()); 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintHtmlDialogDelegateTest, UnownedFlowLetGo) { 33772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<WebUIMessageHandler*> handlers; 33872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delegate_->GetWebUIMessageHandlers(&handlers); 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_.reset(); 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(mock_flow_handler_.get(), NotNull()); 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Testing for ExternalHtmlDialogUI needs a mock TabContents, mock 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CloudPrintHtmlDialogDelegate (provided through the mock 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// tab_contents) 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Testing for PrintDialogCloud needs a mock Browser. 348