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 <vector>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted_memory.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/printing/print_preview_dialog_controller.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/printing/print_preview_test.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/print_view_manager.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/print_preview/print_preview_ui.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h"
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_manager.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/plugin_service.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/site_instance.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "printing/print_job_constants.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents;
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using web_modal::WebContentsModalDialogManager;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::RefCountedBytes* CreateTestData() {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const unsigned char blob1[] =
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "12346102356120394751634516591348710478123649165419234519234512349134";
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<unsigned char> preview_data(blob1, blob1 + sizeof(blob1));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new base::RefCountedBytes(preview_data);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool IsShowingWebContentsModalDialog(WebContents* tab) {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebContentsModalDialogManager* web_contents_modal_dialog_manager =
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebContentsModalDialogManager::FromWebContents(tab);
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return web_contents_modal_dialog_manager->IsDialogActive();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrintPreviewUIUnitTest : public PrintPreviewTest {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrintPreviewUIUnitTest();
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~PrintPreviewUIUnitTest();
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUp() OVERRIDE;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PrintPreviewUIUnitTest);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PrintPreviewUIUnitTest::PrintPreviewUIUnitTest() {}
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PrintPreviewUIUnitTest::~PrintPreviewUIUnitTest() {}
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PrintPreviewUIUnitTest::SetUp() {
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrintPreviewTest::SetUp();
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::NewTab(browser());
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Create/Get a preview tab for initiator.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintPreviewUIUnitTest, PrintPreviewData) {
66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WebContents* initiator = browser()->tab_strip_model()->GetActiveWebContents();
67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  ASSERT_TRUE(initiator);
68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_FALSE(IsShowingWebContentsModalDialog(initiator));
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  printing::PrintPreviewDialogController* controller =
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      printing::PrintPreviewDialogController::GetInstance();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(controller);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  printing::PrintViewManager* print_view_manager =
75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      printing::PrintViewManager::FromWebContents(initiator);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  print_view_manager->PrintPreviewNow(false);
77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WebContents* preview_dialog = controller->GetOrCreatePreviewDialog(initiator);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_NE(initiator, preview_dialog);
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, browser()->tab_strip_model()->count());
81ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_TRUE(IsShowingWebContentsModalDialog(initiator));
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrintPreviewUI* preview_ui = static_cast<PrintPreviewUI*>(
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      preview_dialog->GetWebUI()->GetController());
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(preview_ui != NULL);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<base::RefCountedBytes> data;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetPrintPreviewDataForIndex(
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      printing::COMPLETE_PREVIEW_DOCUMENT_INDEX,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &data);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(NULL, data.get());
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<base::RefCountedBytes> dummy_data = CreateTestData();
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->SetPrintPreviewDataForIndex(
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      printing::COMPLETE_PREVIEW_DOCUMENT_INDEX,
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dummy_data.get());
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetPrintPreviewDataForIndex(
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      printing::COMPLETE_PREVIEW_DOCUMENT_INDEX,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &data);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(dummy_data->size(), data->size());
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(dummy_data.get(), data.get());
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should not cause any memory leaks.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dummy_data = new base::RefCountedBytes();
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->SetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX,
107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                          dummy_data.get());
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clear the preview data.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->ClearAllPreviewData();
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetPrintPreviewDataForIndex(
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      printing::COMPLETE_PREVIEW_DOCUMENT_INDEX,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &data);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(NULL, data.get());
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set and get the individual draft pages.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintPreviewUIUnitTest, PrintPreviewDraftPages) {
120ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WebContents* initiator = browser()->tab_strip_model()->GetActiveWebContents();
121ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  ASSERT_TRUE(initiator);
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  printing::PrintPreviewDialogController* controller =
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      printing::PrintPreviewDialogController::GetInstance();
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(controller);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  printing::PrintViewManager* print_view_manager =
128ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      printing::PrintViewManager::FromWebContents(initiator);
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  print_view_manager->PrintPreviewNow(false);
130ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WebContents* preview_dialog = controller->GetOrCreatePreviewDialog(initiator);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_NE(initiator, preview_dialog);
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, browser()->tab_strip_model()->count());
134ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_TRUE(IsShowingWebContentsModalDialog(initiator));
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrintPreviewUI* preview_ui = static_cast<PrintPreviewUI*>(
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      preview_dialog->GetWebUI()->GetController());
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(preview_ui != NULL);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<base::RefCountedBytes> data;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX, &data);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(NULL, data.get());
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<base::RefCountedBytes> dummy_data = CreateTestData();
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->SetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX,
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          dummy_data.get());
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX, &data);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(dummy_data->size(), data->size());
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(dummy_data.get(), data.get());
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set and get the third page data.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->SetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX + 2,
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          dummy_data.get());
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX + 2,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          &data);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(dummy_data->size(), data->size());
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(dummy_data.get(), data.get());
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get the second page data.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX + 1,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          &data);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(NULL, data.get());
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->SetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX + 1,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          dummy_data.get());
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX + 1,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          &data);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(dummy_data->size(), data->size());
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(dummy_data.get(), data.get());
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clear the preview data.
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->ClearAllPreviewData();
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX, &data);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(NULL, data.get());
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the browser-side print preview cancellation functionality.
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PrintPreviewUIUnitTest, GetCurrentPrintPreviewStatus) {
180ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WebContents* initiator = browser()->tab_strip_model()->GetActiveWebContents();
181ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  ASSERT_TRUE(initiator);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  printing::PrintPreviewDialogController* controller =
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      printing::PrintPreviewDialogController::GetInstance();
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(controller);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  printing::PrintViewManager* print_view_manager =
188ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      printing::PrintViewManager::FromWebContents(initiator);
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  print_view_manager->PrintPreviewNow(false);
190ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WebContents* preview_dialog = controller->GetOrCreatePreviewDialog(initiator);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
192ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_NE(initiator, preview_dialog);
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, browser()->tab_strip_model()->count());
194ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_TRUE(IsShowingWebContentsModalDialog(initiator));
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrintPreviewUI* preview_ui = static_cast<PrintPreviewUI*>(
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      preview_dialog->GetWebUI()->GetController());
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(preview_ui != NULL);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test with invalid |preview_ui_addr|.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool cancel = false;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int32 kInvalidId = -5;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetCurrentPrintPreviewStatus(kInvalidId, 0, &cancel);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(cancel);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kFirstRequestId = 1000;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kSecondRequestId = 1001;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int32 preview_ui_addr = preview_ui->GetIDForPrintPreviewUI();
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test with kFirstRequestId.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->OnPrintPreviewRequest(kFirstRequestId);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cancel = true;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetCurrentPrintPreviewStatus(preview_ui_addr, kFirstRequestId,
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           &cancel);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cancel);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cancel = false;
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetCurrentPrintPreviewStatus(preview_ui_addr, kSecondRequestId,
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           &cancel);
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(cancel);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test with kSecondRequestId.
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->OnPrintPreviewRequest(kSecondRequestId);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cancel = false;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetCurrentPrintPreviewStatus(preview_ui_addr, kFirstRequestId,
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           &cancel);
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(cancel);
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cancel = true;
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  preview_ui->GetCurrentPrintPreviewStatus(preview_ui_addr, kSecondRequestId,
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           &cancel);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cancel);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
234