| // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "ppapi/tests/test_printing.h" | 
 |  | 
 | #include "ppapi/cpp/dev/printing_dev.h" | 
 | #include "ppapi/cpp/instance.h" | 
 | #include "ppapi/tests/testing_instance.h" | 
 |  | 
 | namespace { | 
 | bool g_callback_triggered; | 
 | int32_t g_callback_result; | 
 | PP_PrintSettings_Dev g_print_settings; | 
 | }  // namespace | 
 |  | 
 | REGISTER_TEST_CASE(Printing); | 
 |  | 
 | class TestPrinting_Dev : public pp::Printing_Dev { | 
 |  public: | 
 |   explicit TestPrinting_Dev(pp::Instance* instance) : | 
 |   pp::Printing_Dev(instance) {} | 
 |   virtual ~TestPrinting_Dev() {} | 
 |   virtual uint32_t QuerySupportedPrintOutputFormats() { return 0; } | 
 |   virtual int32_t PrintBegin( | 
 |       const PP_PrintSettings_Dev& print_settings) { return 0; } | 
 |   virtual pp::Resource PrintPages( | 
 |       const PP_PrintPageNumberRange_Dev* page_ranges, | 
 |   uint32_t page_range_count) { | 
 |     return pp::Resource(); | 
 |   } | 
 |   virtual void PrintEnd() {} | 
 |   virtual bool IsPrintScalingDisabled() { return false; } | 
 | }; | 
 |  | 
 | TestPrinting::TestPrinting(TestingInstance* instance) | 
 |     : TestCase(instance), | 
 |       nested_event_(instance->pp_instance()) { | 
 |   callback_factory_.Initialize(this); | 
 | } | 
 |  | 
 | void TestPrinting::RunTests(const std::string& filter) { | 
 |   RUN_TEST(GetDefaultPrintSettings, filter); | 
 | } | 
 |  | 
 | std::string TestPrinting::TestGetDefaultPrintSettings() { | 
 |   g_callback_triggered = false; | 
 |   TestPrinting_Dev test_printing(instance_); | 
 |   pp::CompletionCallbackWithOutput<PP_PrintSettings_Dev> cb = | 
 |       callback_factory_.NewCallbackWithOutput(&TestPrinting::Callback); | 
 |   test_printing.GetDefaultPrintSettings(cb); | 
 |   nested_event_.Wait(); | 
 |  | 
 |   ASSERT_EQ(PP_OK, g_callback_result); | 
 |   ASSERT_TRUE(g_callback_triggered); | 
 |  | 
 |   // Sanity check the |printable_area|, |content_area| and |paper_size| members. | 
 |   // It is possible these values are outside these ranges but it shouldn't | 
 |   // happen in practice and probably means there is an error in computing | 
 |   // the default print settings. These values are in points. | 
 |   ASSERT_TRUE(g_print_settings.printable_area.point.x < 200); | 
 |   ASSERT_TRUE(g_print_settings.printable_area.point.y < 200); | 
 |   ASSERT_TRUE(g_print_settings.printable_area.size.width < 2000); | 
 |   ASSERT_TRUE(g_print_settings.printable_area.size.height < 2000); | 
 |  | 
 |   ASSERT_TRUE(g_print_settings.content_area.point.x < 200); | 
 |   ASSERT_TRUE(g_print_settings.content_area.point.y < 200); | 
 |   ASSERT_TRUE(g_print_settings.content_area.size.width < 2000); | 
 |   ASSERT_TRUE(g_print_settings.content_area.size.height< 2000); | 
 |  | 
 |   ASSERT_TRUE(g_print_settings.paper_size.width < 2000); | 
 |   ASSERT_TRUE(g_print_settings.paper_size.height < 2000); | 
 |  | 
 |   PASS(); | 
 | } | 
 |  | 
 | void TestPrinting::Callback(int32_t result, | 
 |                             PP_PrintSettings_Dev& print_settings) { | 
 |   g_callback_triggered = true; | 
 |   g_callback_result = result; | 
 |   g_print_settings = print_settings; | 
 |   nested_event_.Signal(); | 
 | } |