summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorhbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-16 05:30:54 +0000
committerhbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-16 05:30:54 +0000
commitda911550f99db64535a175d62f63d467eec12bbc (patch)
treeb4548469fb74726e28cf5408257f3169eddf662a /chrome
parentdafa920a52965183ce936f0837868f6b6f0cbb6c (diff)
downloadchromium_src-da911550f99db64535a175d62f63d467eec12bbc.zip
chromium_src-da911550f99db64535a175d62f63d467eec12bbc.tar.gz
chromium_src-da911550f99db64535a175d62f63d467eec12bbc.tar.bz2
Introduce printing test case (Step 1)
This CL will just show how to actually execute a full print process from start to finish. It will verify that a page has been printed (successfully). In the next steps, we would need to test whether the elements rendered after printing are correct. (how?) And fixed some lint errors. Thanks for hbono and maruel to lead me in the right direction :) Original patch by Mohamed Mansour (see http://codereview.chromium.org/67036/show), r=me,maruel,sverrir. BUG=? Review URL: http://codereview.chromium.org/67202 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13831 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/renderer/mock_render_thread.cc27
-rw-r--r--chrome/renderer/mock_render_thread.h15
-rw-r--r--chrome/renderer/render_view.h2
-rw-r--r--chrome/renderer/render_view_unittest.cc35
4 files changed, 76 insertions, 3 deletions
diff --git a/chrome/renderer/mock_render_thread.cc b/chrome/renderer/mock_render_thread.cc
index 19fdd48..b133238 100644
--- a/chrome/renderer/mock_render_thread.cc
+++ b/chrome/renderer/mock_render_thread.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2009 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.
@@ -73,6 +73,12 @@ void MockRenderThread::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnMsgCreateWidget);
IPC_MESSAGE_HANDLER(ViewHostMsg_OpenChannelToExtension,
OnMsgOpenChannelToExtension);
+#if defined(OS_WIN)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_GetDefaultPrintSettings,
+ OnGetDefaultPrintSettings);
+ IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptedPrint,
+ OnScriptedPrint);
+#endif
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP_EX()
}
@@ -89,3 +95,22 @@ void MockRenderThread::OnMsgOpenChannelToExtension(
const std::string& extension_id, int* channel_id) {
*channel_id = 0;
}
+
+void MockRenderThread::OnGetDefaultPrintSettings(ViewMsg_Print_Params* params) {
+ memset(params, 0, sizeof(ViewMsg_Print_Params));
+ params->dpi = 72;
+ params->desired_dpi = 72;
+ params->document_cookie = 1;
+ params->printable_size = gfx::Size(500, 500);
+}
+
+void MockRenderThread::OnScriptedPrint(gfx::NativeViewId host_window,
+ int cookie,
+ int expected_pages_count,
+ ViewMsg_PrintPages_Params* settings) {
+ memset(settings, 0, sizeof(ViewMsg_PrintPages_Params));
+ settings->params.dpi = 72;
+ settings->params.document_cookie = 1;
+ settings->params.desired_dpi = 72;
+ settings->params.printable_size = gfx::Size(500, 500);
+}
diff --git a/chrome/renderer/mock_render_thread.h b/chrome/renderer/mock_render_thread.h
index a89822a6..f88543b 100644
--- a/chrome/renderer/mock_render_thread.h
+++ b/chrome/renderer/mock_render_thread.h
@@ -1,15 +1,19 @@
-// Copyright (c) 2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2009 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.
#ifndef CHROME_RENDERER_MOCK_RENDER_THREAD_H_
#define CHROME_RENDERER_MOCK_RENDER_THREAD_H_
+#include <string>
#include <vector>
#include "chrome/common/ipc_test_sink.h"
#include "chrome/renderer/render_thread.h"
+struct ViewMsg_Print_Params;
+struct ViewMsg_PrintPages_Params;
+
// This class is very simple mock of RenderThread. It simulates an IPC channel
// which supports only two messages:
// ViewHostMsg_CreateWidget : sync message sent by the Widget.
@@ -73,6 +77,15 @@ class MockRenderThread : public RenderThreadBase {
void OnMsgOpenChannelToExtension(const std::string& extension_id,
int* channel_id);
+ // The RenderView expects default print settings.
+ void OnGetDefaultPrintSettings(ViewMsg_Print_Params* setting);
+
+ // The RenderView expects final print settings from the user.
+ void OnScriptedPrint(gfx::NativeViewId host_window,
+ int cookie,
+ int expected_pages_count,
+ ViewMsg_PrintPages_Params* settings);
+
IPC::TestSink sink_;
// Routing id what will be assigned to the Widget.
diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h
index dd9b7c6..d0264f3 100644
--- a/chrome/renderer/render_view.h
+++ b/chrome/renderer/render_view.h
@@ -6,6 +6,7 @@
#define CHROME_RENDERER_RENDER_VIEW_H_
#include <string>
+#include <queue>
#include <vector>
#include "base/basictypes.h"
@@ -401,6 +402,7 @@ class RenderView : public RenderWidget,
FRIEND_TEST(RenderViewTest, OnImeStateChanged);
FRIEND_TEST(RenderViewTest, ImeComposition);
FRIEND_TEST(RenderViewTest, OnSetTextDirection);
+ FRIEND_TEST(RenderViewTest, OnPrintPages);
explicit RenderView(RenderThreadBase* render_thread);
diff --git a/chrome/renderer/render_view_unittest.cc b/chrome/renderer/render_view_unittest.cc
index 3be31bd..85ad59e 100644
--- a/chrome/renderer/render_view_unittest.cc
+++ b/chrome/renderer/render_view_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2009 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.
@@ -276,3 +276,36 @@ TEST_F(RenderViewTest, OnSetTextDirection) {
EXPECT_EQ(output, kTextDirection[i].expected_result);
}
}
+
+// Tests that printing pages work and sending and receiving messages through
+// that channel all works.
+TEST_F(RenderViewTest, OnPrintPages) {
+#if defined(OS_WIN)
+ // Lets simulate a print pages with Hello world.
+ LoadHTML("<body><p>Hello World!</p></body>");
+ view_->OnPrintPages();
+
+ // The renderer should be done calculating the number of rendered pages
+ // according to the specified settings defined in the mock render thread.
+ // Verify the page count is correct.
+ const IPC::Message* page_cnt_msg =
+ render_thread_.sink().GetUniqueMessageMatching(
+ ViewHostMsg_DidGetPrintedPagesCount::ID);
+ EXPECT_TRUE(page_cnt_msg);
+ ViewHostMsg_DidGetPrintedPagesCount::Param post_page_count_param;
+ ViewHostMsg_DidGetPrintedPagesCount::Read(page_cnt_msg,
+ &post_page_count_param);
+ EXPECT_EQ(1, post_page_count_param.b);
+
+ // Verify the rendered "printed page".
+ const IPC::Message* did_print_msg =
+ render_thread_.sink().GetUniqueMessageMatching(
+ ViewHostMsg_DidPrintPage::ID);
+ EXPECT_TRUE(did_print_msg);
+ ViewHostMsg_DidPrintPage::Param post_did_print_page_param;
+ ViewHostMsg_DidPrintPage::Read(did_print_msg, &post_did_print_page_param);
+ EXPECT_EQ(0, post_did_print_page_param.page_number);
+#else
+ NOTIMPLEMENTED();
+#endif
+}