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 "content/browser/renderer_host/pepper/browser_ppapi_host_test.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_print_settings_manager.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/pepper/pepper_printing_host.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/host_message_context.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/ppapi_host.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/resource_message_params.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/resource_message_test_sink.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Mock implementation of |PepperPrintSettingsManager| for test purposes. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockPepperPrintSettingsManager 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public PepperPrintSettingsManager { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockPepperPrintSettingsManager(const PP_PrintSettings_Dev& settings); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockPepperPrintSettingsManager() {} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PepperPrintSettingsManager implementation. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetDefaultPrintSettings( 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PepperPrintSettingsManager::Callback callback) OVERRIDE; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_PrintSettings_Dev settings_; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockPepperPrintSettingsManager); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockPepperPrintSettingsManager::MockPepperPrintSettingsManager( 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_PrintSettings_Dev& settings) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : settings_(settings) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPepperPrintSettingsManager::GetDefaultPrintSettings( 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PepperPrintSettingsManager::Callback callback) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(PepperPrintSettingsManager::Result(settings_, PP_OK)); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PepperPrintingHostTest 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public testing::Test, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public BrowserPpapiHostTest { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PepperPrintingHostTest() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~PepperPrintingHostTest() { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PepperPrintingHostTest); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PP_SizeEqual(const PP_Size& lhs, const PP_Size& rhs) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lhs.width == rhs.width && lhs.height == rhs.height; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PP_RectEqual(const PP_Rect& lhs, const PP_Rect& rhs) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lhs.point.x == rhs.point.x && 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lhs.point.y == rhs.point.y && 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_SizeEqual(lhs.size, rhs.size); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PepperPrintingHostTest, GetDefaultPrintSettings) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance pp_instance = 12345; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource pp_resource = 67890; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_PrintSettings_Dev expected_settings = { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { 0, 0 }, { 500, 515 } }, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { 25, 35 }, { 300, 720 } }, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 600, 700 }, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 200, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_PRINTORIENTATION_NORMAL, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_PRINTSCALINGOPTION_NONE, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FALSE, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_PRINTOUTPUTFORMAT_PDF 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct the resource host. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PepperPrintSettingsManager> manager( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockPepperPrintSettingsManager(expected_settings)); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PepperPrintingHost printing(GetBrowserPpapiHost()->GetPpapiHost(), 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp_instance, pp_resource, manager.Pass()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a message being received. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::proxy::ResourceMessageCallParams call_params(pp_resource, 1); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::host::HostMessageContext context(call_params); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 result = printing.OnResourceMessageReceived( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PpapiHostMsg_Printing_GetDefaultPrintSettings(), &context); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PP_OK_COMPLETIONPENDING, result); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This should have sent the Pepper reply to our test sink. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::proxy::ResourceMessageReplyParams reply_params; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message reply_msg; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sink().GetFirstResourceReplyMatching( 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PpapiPluginMsg_Printing_GetDefaultPrintSettingsReply::ID, &reply_params, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &reply_msg)); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Validation of reply. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(call_params.sequence(), reply_params.sequence()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(PP_OK, reply_params.result()); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PpapiPluginMsg_Printing_GetDefaultPrintSettingsReply::Schema::Param 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reply_msg_param; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(PpapiPluginMsg_Printing_GetDefaultPrintSettingsReply::Read( 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &reply_msg, &reply_msg_param)); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_PrintSettings_Dev actual_settings = reply_msg_param.a; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PP_RectEqual(expected_settings.printable_area, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_settings.printable_area)); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PP_RectEqual(expected_settings.content_area, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_settings.content_area)); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PP_SizeEqual(expected_settings.paper_size, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_settings.paper_size)); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_settings.dpi, actual_settings.dpi); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_settings.orientation, actual_settings.orientation); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_settings.print_scaling_option, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_settings.print_scaling_option); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_settings.grayscale, actual_settings.grayscale); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_settings.format, actual_settings.format); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 129