Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(681)

Unified Diff: ppapi/proxy/ppp_printing_proxy.cc

Issue 9455083: Proxy the PPP_Printing interface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/proxy/ppp_printing_proxy.h ('k') | ppapi/shared_impl/api_id.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/ppp_printing_proxy.cc
diff --git a/ppapi/proxy/ppp_printing_proxy.cc b/ppapi/proxy/ppp_printing_proxy.cc
new file mode 100644
index 0000000000000000000000000000000000000000..51f03bc7e165bddb2dafcf8dbb363ceff8df272a
--- /dev/null
+++ b/ppapi/proxy/ppp_printing_proxy.cc
@@ -0,0 +1,162 @@
+// 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/proxy/ppp_printing_proxy.h"
+
+#include <string.h>
+
+#include "ppapi/c/dev/ppp_printing_dev.h"
+#include "ppapi/proxy/host_dispatcher.h"
+#include "ppapi/proxy/plugin_dispatcher.h"
+#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/proxy_lock.h"
+
+namespace ppapi {
+namespace proxy {
+
+namespace {
+
+uint32_t QuerySupportedFormats(PP_Instance instance) {
+ uint32_t result = 0;
+ HostDispatcher::GetForInstance(instance)->Send(
+ new PpapiMsg_PPPPrinting_QuerySupportedFormats(API_ID_PPP_PRINTING,
+ instance, &result));
+ return result;
+}
+
+int32_t Begin(PP_Instance instance,
+ const struct PP_PrintSettings_Dev* print_settings) {
+ // Settings is just serialized as a string.
+ std::string settings_string;
+ settings_string.resize(sizeof(PP_PrintSettings_Dev));
+ memcpy(&settings_string[0], print_settings, sizeof(PP_PrintSettings_Dev));
viettrungluu 2012/02/27 18:58:46 I suppose this is more aliasing-rules-correct than
+
+ int32_t result = 0;
+ HostDispatcher::GetForInstance(instance)->Send(
+ new PpapiMsg_PPPPrinting_Begin(API_ID_PPP_PRINTING, instance,
+ settings_string, &result));
+ return result;
+}
+
+PP_Resource PrintPages(PP_Instance instance,
+ const PP_PrintPageNumberRange_Dev* page_ranges,
+ uint32_t page_range_count) {
+ std::vector<PP_PrintPageNumberRange_Dev> pages;
viettrungluu 2012/02/27 18:58:46 You can just do: std::vector<...> pages(page_rang
+ for (uint32_t i = 0; i < page_range_count; i++)
+ pages.push_back(page_ranges[i]);
+
+ HostResource result;
+ HostDispatcher::GetForInstance(instance)->Send(
+ new PpapiMsg_PPPPrinting_PrintPages(API_ID_PPP_PRINTING,
+ instance, pages, &result));
+ return result.host_resource();
+}
+
+void End(PP_Instance instance) {
+ HostDispatcher::GetForInstance(instance)->Send(
+ new PpapiMsg_PPPPrinting_End(API_ID_PPP_PRINTING, instance));
+}
+
+PP_Bool IsScalingDisabled(PP_Instance instance) {
+ bool result = false;
+ HostDispatcher::GetForInstance(instance)->Send(
+ new PpapiMsg_PPPPrinting_IsScalingDisabled(API_ID_PPP_PRINTING,
+ instance, &result));
+ return PP_FromBool(result);
+}
+
+const PPP_Printing_Dev ppp_printing_interface = {
+ &QuerySupportedFormats,
+ &Begin,
+ &PrintPages,
+ &End,
+ &IsScalingDisabled
+};
+
+} // namespace
+
+PPP_Printing_Proxy::PPP_Printing_Proxy(Dispatcher* dispatcher)
+ : InterfaceProxy(dispatcher),
+ ppp_printing_impl_(NULL) {
+ if (dispatcher->IsPlugin()) {
+ ppp_printing_impl_ = static_cast<const PPP_Printing_Dev*>(
+ dispatcher->local_get_interface()(PPP_PRINTING_DEV_INTERFACE));
+ }
+}
+
+PPP_Printing_Proxy::~PPP_Printing_Proxy() {
+}
+
+// static
+const PPP_Printing_Dev* PPP_Printing_Proxy::GetProxyInterface() {
+ return &ppp_printing_interface;
+}
+
+bool PPP_Printing_Proxy::OnMessageReceived(const IPC::Message& msg) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(PPP_Printing_Proxy, msg)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPPrinting_QuerySupportedFormats,
+ OnPluginMsgQuerySupportedFormats)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPPrinting_Begin,
+ OnPluginMsgBegin)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPPrinting_PrintPages,
+ OnPluginMsgPrintPages)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPPrinting_End,
+ OnPluginMsgEnd)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPPrinting_IsScalingDisabled,
+ OnPluginMsgIsScalingDisabled)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void PPP_Printing_Proxy::OnPluginMsgQuerySupportedFormats(PP_Instance instance,
+ uint32_t* result) {
+ if (ppp_printing_impl_)
+ *result = ppp_printing_impl_->QuerySupportedFormats(instance);
+ else
+ *result = 0;
+}
+
+void PPP_Printing_Proxy::OnPluginMsgBegin(PP_Instance instance,
+ const std::string& settings_string,
+ int32_t* result) {
+ *result = 0;
+
+ PP_PrintSettings_Dev settings;
+ if (settings_string.size() != sizeof(settings))
+ return;
+ memcpy(&settings, &settings_string[0], sizeof(settings));
+
+ if (ppp_printing_impl_)
+ ppp_printing_impl_->Begin(instance, &settings);
+}
+
+void PPP_Printing_Proxy::OnPluginMsgPrintPages(
+ PP_Instance instance,
+ const std::vector<PP_PrintPageNumberRange_Dev>& pages,
+ HostResource* result) {
+ if (ppp_printing_impl_ && !pages.empty()) {
+ result->SetHostResource(
+ instance,
+ ppp_printing_impl_->PrintPages(instance, &pages[0],
+ static_cast<uint32_t>(pages.size())));
+ }
+}
+
+void PPP_Printing_Proxy::OnPluginMsgEnd(PP_Instance instance) {
+ if (ppp_printing_impl_)
+ ppp_printing_impl_->End(instance);
+}
+
+void PPP_Printing_Proxy::OnPluginMsgIsScalingDisabled(PP_Instance instance,
+ bool* result) {
+ if (ppp_printing_impl_)
+ *result = PP_ToBool(ppp_printing_impl_->IsScalingDisabled(instance));
+ else
+ *result = false;
+}
+
+} // namespace proxy
+} // namespace ppapi
« no previous file with comments | « ppapi/proxy/ppp_printing_proxy.h ('k') | ppapi/shared_impl/api_id.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698