print_dialog_cloud_unittest.cc revision 513209b27ff55e2841eac0e4120199c23acce758
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 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/printing/print_dialog_cloud.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/printing/print_dialog_cloud_internal.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/values.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/weak_ptr.h" 15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/browser_thread.h" 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/printing/cloud_print/cloud_print_url.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_details.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_observer.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_registrar.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_source.h" 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_type.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h" 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h" 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gmock/include/gmock/gmock.h" 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::A; 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::AtLeast; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::Eq; 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::HasSubstr; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::IsNull; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::NotNull; 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::Return; 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::StrEq; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::_; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char* const kPDFTestFile = "printing/cloud_print_unittest.pdf"; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char* const kEmptyPDFTestFile = 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "printing/cloud_print_emptytest.pdf"; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char* const kMockJobTitle = "Mock Job Title"; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFilePath GetTestDataFileName() { 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_data_directory; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_file = test_data_directory.AppendASCII(kPDFTestFile); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return test_file; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFilePath GetEmptyDataFileName() { 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_data_directory; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_file = test_data_directory.AppendASCII(kEmptyPDFTestFile); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return test_file; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchar* GetTestData() { 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static std::string sTestFileData; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (sTestFileData.empty()) { 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_file = GetTestDataFileName(); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch file_util::ReadFileToString(test_file, &sTestFileData); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return &sTestFileData[0]; 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochMATCHER_P(StringValueEq, expected, "StringValue") { 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (expected->Equals(&arg)) 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string expected_string, arg_string; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch expected->GetAsString(&expected_string); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg.GetAsString(&arg_string); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *result_listener << "'" << arg_string 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << "' (expected '" << expected_string << "')"; 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace internal_cloud_print_helpers { 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockCloudPrintFlowHandler 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : public CloudPrintFlowHandler, 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public base::SupportsWeakPtr<MockCloudPrintFlowHandler> { 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit MockCloudPrintFlowHandler(const FilePath& path, 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const string16& title) 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : CloudPrintFlowHandler(path, title) {} 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD0(DestructorCalled, void()); 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD0(RegisterMessages, void()); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD3(Observe, 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(NotificationType type, 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details)); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD1(SetDialogDelegate, 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(CloudPrintHtmlDialogDelegate* delegate)); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD0(CreateCloudPrintDataSender, 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<CloudPrintDataSender>()); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockCloudPrintHtmlDialogDelegate : public CloudPrintHtmlDialogDelegate { 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD0(IsDialogModal, 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool()); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD0(GetDialogTitle, 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring()); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD0(GetDialogContentURL, 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL()); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD1(GetDOMMessageHandlers, 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(std::vector<DOMMessageHandler*>* handlers)); 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD1(GetDialogSize, 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(gfx::Size* size)); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_CONST_METHOD0(GetDialogArgs, 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string()); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD1(OnDialogClosed, 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(const std::string& json_retval)); 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD2(OnCloseContents, 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(TabContents* source, bool *out_close_dialog)); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace internal_cloud_print_helpers 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing internal_cloud_print_helpers::CloudPrintDataSenderHelper; 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing internal_cloud_print_helpers::CloudPrintDataSender; 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockExternalHtmlDialogUI : public ExternalHtmlDialogUI { 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD1(RenderViewCreated, 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void(RenderViewHost* render_view_host)); 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockCloudPrintDataSenderHelper : public CloudPrintDataSenderHelper { 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(scottbyer): At some point this probably wants to use a 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // MockTabContents instead of NULL, and to pre-load it with a bunch 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // of expects/results. 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockCloudPrintDataSenderHelper() : CloudPrintDataSenderHelper(NULL) {} 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD1(CallJavascriptFunction, void(const std::wstring&)); 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD2(CallJavascriptFunction, void(const std::wstring&, 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const Value& arg1)); 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD3(CallJavascriptFunction, void(const std::wstring&, 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const Value& arg1, 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const Value& arg2)); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CloudPrintURLTest : public testing::Test { 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CloudPrintURLTest() {} 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_.reset(new TestingProfile()); 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<Profile> profile_; 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintURLTest, CheckDefaultURLs) { 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string service_url = 1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CloudPrintURL(profile_.get()). 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetCloudPrintServiceURL().spec(); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(service_url, HasSubstr("www.google.com")); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(service_url, HasSubstr("cloudprint")); 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string dialog_url = 1633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CloudPrintURL(profile_.get()). 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetCloudPrintServiceDialogURL().spec(); 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("www.google.com")); 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/cloudprint/")); 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/client/")); 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, Not(HasSubstr("cloudprint/cloudprint"))); 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/dialog.html")); 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Repeat to make sure there isn't a transient glitch. 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dialog_url = 1733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CloudPrintURL(profile_.get()). 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetCloudPrintServiceDialogURL().spec(); 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("www.google.com")); 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/cloudprint/")); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/client/")); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, Not(HasSubstr("cloudprint/cloudprint"))); 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(dialog_url, HasSubstr("/dialog.html")); 180731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 181731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string manage_url = 182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick CloudPrintURL(profile_.get()). 183731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetCloudPrintServiceManageURL().spec(); 184731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_THAT(manage_url, HasSubstr("www.google.com")); 185731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_THAT(manage_url, HasSubstr("/cloudprint/")); 186731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_THAT(manage_url, Not(HasSubstr("/client/"))); 187731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_THAT(manage_url, Not(HasSubstr("cloudprint/cloudprint"))); 188731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_THAT(manage_url, HasSubstr("/manage")); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Testing for CloudPrintDataSender needs a mock DOMUI. 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CloudPrintDataSenderTest : public testing::Test { 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CloudPrintDataSenderTest() 195731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : file_thread_(BrowserThread::FILE, &message_loop_), 196731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick io_thread_(BrowserThread::IO, &message_loop_) {} 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 mock_job_title(ASCIIToUTF16(kMockJobTitle)); 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mock_helper_.reset(new MockCloudPrintDataSenderHelper); 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch print_data_sender_ = 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new CloudPrintDataSender(mock_helper_.get(), mock_job_title); 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<CloudPrintDataSender> print_data_sender_; 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<MockCloudPrintDataSenderHelper> mock_helper_; 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop message_loop_; 210731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread file_thread_; 211731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread io_thread_; 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(scottbyer): DISABLED until the binary test file can get 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// checked in separate from the patch. 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintDataSenderTest, CanSend) { 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StringValue mock_job_title(kMockJobTitle); 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_helper_, 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CallJavascriptFunction(_, _, StringValueEq(&mock_job_title))). 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WillOnce(Return()); 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_data_file_name = GetTestDataFileName(); 223731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 224731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NewRunnableMethod( 225731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick print_data_sender_.get(), 226731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &CloudPrintDataSender::ReadPrintDataFile, 227731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick test_data_file_name)); 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintDataSenderTest, BadFile) { 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_helper_, CallJavascriptFunction(_, _, _)).Times(0); 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath bad_data_file_name(L"/some/file/that/isnot/there"); 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath bad_data_file_name("/some/file/that/isnot/there"); 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 239731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 240731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NewRunnableMethod( 241731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick print_data_sender_.get(), 242731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &CloudPrintDataSender::ReadPrintDataFile, 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bad_data_file_name)); 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintDataSenderTest, EmptyFile) { 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_helper_, CallJavascriptFunction(_, _, _)).Times(0); 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath empty_data_file_name = GetEmptyDataFileName(); 251731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 252731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NewRunnableMethod( 253731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick print_data_sender_.get(), 254731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &CloudPrintDataSender::ReadPrintDataFile, 255731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick empty_data_file_name)); 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Testing for CloudPrintFlowHandler needs a mock 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CloudPrintHtmlDialogDelegate, mock CloudPrintDataSender, and a mock 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DOMUI. 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Testing for CloudPrintHtmlDialogDelegate needs a mock 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CloudPrintFlowHandler. 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing internal_cloud_print_helpers::MockCloudPrintFlowHandler; 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing internal_cloud_print_helpers::CloudPrintHtmlDialogDelegate; 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CloudPrintHtmlDialogDelegateTest : public testing::Test { 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CloudPrintHtmlDialogDelegateTest() 272731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : ui_thread_(BrowserThread::UI, &message_loop_) {} 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath mock_path; 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 mock_title; 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockCloudPrintFlowHandler* handler = 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new MockCloudPrintFlowHandler(mock_path, mock_title); 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mock_flow_handler_ = handler->AsWeakPtr(); 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_flow_handler_.get(), SetDialogDelegate(_)); 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*mock_flow_handler_.get(), SetDialogDelegate(NULL)); 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_.reset(new CloudPrintHtmlDialogDelegate( 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mock_flow_handler_.get(), 100, 100, std::string())); 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TearDown() { 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_.reset(); 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (mock_flow_handler_) 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delete mock_flow_handler_.get(); 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoopForUI message_loop_; 294731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread ui_thread_; 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::WeakPtr<MockCloudPrintFlowHandler> mock_flow_handler_; 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<CloudPrintHtmlDialogDelegate> delegate_; 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintHtmlDialogDelegateTest, BasicChecks) { 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(delegate_->IsDialogModal()); 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(delegate_->GetDialogContentURL().spec(), 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StrEq(chrome::kCloudPrintResourcesURL)); 303513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(delegate_->GetDialogTitle().empty()); 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool close_dialog = false; 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->OnCloseContents(NULL, &close_dialog); 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(close_dialog); 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintHtmlDialogDelegateTest, OwnedFlowDestroyed) { 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_.reset(); 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(mock_flow_handler_.get(), IsNull()); 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CloudPrintHtmlDialogDelegateTest, UnownedFlowLetGo) { 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<DOMMessageHandler*> handlers; 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->GetDOMMessageHandlers(&handlers); 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_.reset(); 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_THAT(mock_flow_handler_.get(), NotNull()); 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Testing for ExternalHtmlDialogUI needs a mock TabContents, mock 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CloudPrintHtmlDialogDelegate (provided through the mock 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// tab_contents) 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Testing for PrintDialogCloud needs a mock Browser. 327