print_dialog_cloud_unittest.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/print_dialog_cloud.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/print_dialog_cloud_internal.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/cloud_print/cloud_print_url.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebUIMessageHandler; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::A; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::AtLeast; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Eq; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::HasSubstr; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::IsNull; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::NotNull; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Return; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::StrEq; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ui::ExternalWebDialogUI; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kPDFTestFile[] = "printing/cloud_print_unittest.pdf"; 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kMockJobTitle[] = "Mock Job Title"; 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kMockPrintTicket[] = "Resolution=300"; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetTestDataFileName() { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath test_data_directory; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath test_file = test_data_directory.AppendASCII(kPDFTestFile); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return test_file; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)char* GetTestData() { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string sTestFileData; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sTestFileData.empty()) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath test_file = GetTestDataFileName(); 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::ReadFileToString(test_file, &sTestFileData); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return &sTestFileData[0]; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER_P(StringValueEq, expected, "StringValue") { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected->Equals(&arg)) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string expected_string, arg_string; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected->GetAsString(&expected_string); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg.GetAsString(&arg_string); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_listener << "'" << arg_string 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "' (expected '" << expected_string << "')"; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal_cloud_print_helpers { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockCloudPrintFlowHandler 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public CloudPrintFlowHandler, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public base::SupportsWeakPtr<MockCloudPrintFlowHandler> { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockCloudPrintFlowHandler(const string16& title, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& print_ticket, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& file_type, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool close_after_signin, 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& callback) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : CloudPrintFlowHandler(NULL, title, print_ticket, file_type, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_after_signin, callback) {} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(DestructorCalled, void()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(RegisterMessages, void()); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD3(Observe, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(int type, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(SetDialogDelegate, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(CloudPrintWebDialogDelegate* delegate)); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(CreateCloudPrintDataSender, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CloudPrintDataSender>()); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockCloudPrintWebDialogDelegate : public CloudPrintWebDialogDelegate { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetDialogModalType, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ModalType()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetDialogTitle, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16()); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetDialogContentURL, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL()); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD1(GetWebUIMessageHandlers, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(std::vector<WebUIMessageHandler*>* handlers)); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD1(GetDialogSize, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(gfx::Size* size)); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_CONST_METHOD0(GetDialogArgs, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string()); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(OnDialogClosed, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(const std::string& json_retval)); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(OnCloseContents, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(WebContents* source, bool *out_close_dialog)); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace internal_cloud_print_helpers 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using internal_cloud_print_helpers::CloudPrintDataSenderHelper; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using internal_cloud_print_helpers::CloudPrintDataSender; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockExternalWebDialogUI : public ExternalWebDialogUI { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(RenderViewCreated, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(content::RenderViewHost* render_view_host)); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockCloudPrintDataSenderHelper : public CloudPrintDataSenderHelper { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(scottbyer): At some point this probably wants to use a 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // MockTabContents instead of NULL, and to pre-load it with a bunch 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of expects/results. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockCloudPrintDataSenderHelper() : CloudPrintDataSenderHelper(NULL) {} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(CallJavascriptFunction, void(const std::wstring&)); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(CallJavascriptFunction, void(const std::wstring&, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Value& arg1)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD3(CallJavascriptFunction, void(const std::wstring&, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Value& arg1, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Value& arg2)); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CloudPrintURLTest : public testing::Test { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloudPrintURLTest() {} 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(new TestingProfile()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Profile> profile_; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CloudPrintURLTest, CheckDefaultURLs) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string service_url = 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloudPrintURL(profile_.get()). 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCloudPrintServiceURL().spec(); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(service_url, HasSubstr("www.google.com")); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(service_url, HasSubstr("cloudprint")); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string dialog_url = 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloudPrintURL(profile_.get()). 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCloudPrintServiceDialogURL().spec(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(dialog_url, HasSubstr("www.google.com")); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(dialog_url, HasSubstr("/cloudprint/")); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(dialog_url, HasSubstr("/client/")); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(dialog_url, Not(HasSubstr("cloudprint/cloudprint"))); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(dialog_url, HasSubstr("/dialog.html")); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Repeat to make sure there isn't a transient glitch. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dialog_url = 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloudPrintURL(profile_.get()). 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCloudPrintServiceDialogURL().spec(); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(dialog_url, HasSubstr("www.google.com")); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(dialog_url, HasSubstr("/cloudprint/")); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(dialog_url, HasSubstr("/client/")); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(dialog_url, Not(HasSubstr("cloudprint/cloudprint"))); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(dialog_url, HasSubstr("/dialog.html")); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string manage_url = 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloudPrintURL(profile_.get()). 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCloudPrintServiceManageURL().spec(); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(manage_url, HasSubstr("www.google.com")); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(manage_url, HasSubstr("/cloudprint/")); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(manage_url, Not(HasSubstr("/client/"))); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(manage_url, Not(HasSubstr("cloudprint/cloudprint"))); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(manage_url, HasSubstr("/manage")); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL learn_more_url = CloudPrintURL::GetCloudPrintLearnMoreURL(); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string learn_more_path = learn_more_url.spec(); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(learn_more_path, HasSubstr("www.google.com")); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(learn_more_path, HasSubstr("/support/")); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(learn_more_path, HasSubstr("/cloudprint")); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(learn_more_url.has_path()); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(learn_more_url.has_query()); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL test_page_url = CloudPrintURL::GetCloudPrintTestPageURL(); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string test_page_path = test_page_url.spec(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(test_page_path, HasSubstr("www.google.com")); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(test_page_path, HasSubstr("/landing/")); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(test_page_path, HasSubstr("/cloudprint/")); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(test_page_url.has_path()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(test_page_url.has_query()); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Testing for CloudPrintDataSender needs a mock WebUI. 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CloudPrintDataSenderTest : public testing::Test { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloudPrintDataSenderTest() 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : file_thread_(BrowserThread::FILE, &message_loop_), 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_thread_(BrowserThread::IO, &message_loop_) {} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_helper_.reset(new MockCloudPrintDataSenderHelper); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<CloudPrintDataSender> CreateSender( 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::RefCountedString* data) { 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new CloudPrintDataSender(mock_helper_.get(), 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16(kMockJobTitle), 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16(kMockPrintTicket), 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string("application/pdf"), 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CloudPrintDataSender> print_data_sender_; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MockCloudPrintDataSenderHelper> mock_helper_; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop message_loop_; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread file_thread_; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread io_thread_; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CloudPrintDataSenderTest, CanSend) { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringValue mock_job_title(kMockJobTitle); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_helper_, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CallJavascriptFunction(_, _, StringValueEq(&mock_job_title))). 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WillOnce(Return()); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string data("test_data"); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<CloudPrintDataSender> print_data_sender( 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSender(base::RefCountedString::TakeString(&data))); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath test_data_file_name = GetTestDataFileName(); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserThread::IO, FROM_HERE, 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&CloudPrintDataSender::SendPrintData, print_data_sender)); 25490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(CloudPrintDataSenderTest, NoData) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_helper_, CallJavascriptFunction(_, _, _)).Times(0); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<CloudPrintDataSender> print_data_sender(CreateSender(NULL)); 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath test_data_file_name = GetTestDataFileName(); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserThread::IO, FROM_HERE, 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&CloudPrintDataSender::SendPrintData, print_data_sender)); 26590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(CloudPrintDataSenderTest, EmptyData) { 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_helper_, CallJavascriptFunction(_, _, _)).Times(0); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string data; 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<CloudPrintDataSender> print_data_sender( 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSender(base::RefCountedString::TakeString(&data))); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath test_data_file_name = GetTestDataFileName(); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserThread::IO, FROM_HERE, 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&CloudPrintDataSender::SendPrintData, print_data_sender)); 27890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Testing for CloudPrintFlowHandler needs a mock 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CloudPrintWebDialogDelegate, mock CloudPrintDataSender, and a mock 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WebUI. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Testing for CloudPrintWebDialogDelegate needs a mock 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CloudPrintFlowHandler. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using internal_cloud_print_helpers::MockCloudPrintFlowHandler; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using internal_cloud_print_helpers::CloudPrintWebDialogDelegate; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CloudPrintWebDialogDelegateTest : public testing::Test { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloudPrintWebDialogDelegateTest() 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(BrowserThread::UI, &message_loop_) {} 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 mock_title; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 mock_print_ticket; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mock_file_type; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockCloudPrintFlowHandler* handler = 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new MockCloudPrintFlowHandler(mock_print_ticket, mock_title, 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mock_file_type, false, base::Closure()); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_flow_handler_ = handler->AsWeakPtr(); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_flow_handler_.get(), SetDialogDelegate(_)); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_flow_handler_.get(), SetDialogDelegate(NULL)); 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_.reset(new CloudPrintWebDialogDelegate(mock_flow_handler_.get(), 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string())); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_.reset(); 313868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (mock_flow_handler_.get()) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete mock_flow_handler_.get(); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI message_loop_; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtr<MockCloudPrintFlowHandler> mock_flow_handler_; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<CloudPrintWebDialogDelegate> delegate_; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CloudPrintWebDialogDelegateTest, BasicChecks) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(delegate_->GetDialogContentURL().spec(), 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StrEq(chrome::kChromeUICloudPrintResourcesURL)); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(delegate_->GetDialogTitle().empty()); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool close_dialog = false; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnCloseContents(NULL, &close_dialog); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(close_dialog); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CloudPrintWebDialogDelegateTest, OwnedFlowDestroyed) { 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_.reset(); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(mock_flow_handler_.get(), IsNull()); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CloudPrintWebDialogDelegateTest, UnownedFlowLetGo) { 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<WebUIMessageHandler*> handlers; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->GetWebUIMessageHandlers(&handlers); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_.reset(); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_THAT(mock_flow_handler_.get(), NotNull()); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Testing for ExternalWebDialogUI needs a mock WebContents and mock 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CloudPrintWebDialogDelegate (attached to the mock web_contents). 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Testing for PrintDialogCloud needs a mock Browser. 349