summaryrefslogtreecommitdiffstats
path: root/chrome/browser/metro_viewer
diff options
context:
space:
mode:
authorscottmg@google.com <scottmg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-01 21:25:12 +0000
committerscottmg@google.com <scottmg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-01 21:25:12 +0000
commit56deedeafb9d4880280e33a4d35e769a4c119cf2 (patch)
tree54fc3c6b34e33dc4ade1c11c3355d39e52b1563c /chrome/browser/metro_viewer
parent9d68072cff1c7d2e94ea2d35026f5cdd0736a3de (diff)
downloadchromium_src-56deedeafb9d4880280e33a4d35e769a4c119cf2.zip
chromium_src-56deedeafb9d4880280e33a4d35e769a4c119cf2.tar.gz
chromium_src-56deedeafb9d4880280e33a4d35e769a4c119cf2.tar.bz2
Listen in the browser for a connection from a metro viewer process.
Render to the surface it provides to us. BUG=151718 Review URL: https://codereview.chromium.org/10984007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159559 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/metro_viewer')
-rw-r--r--chrome/browser/metro_viewer/metro_viewer_process_host_win.cc55
-rw-r--r--chrome/browser/metro_viewer/metro_viewer_process_host_win.h41
2 files changed, 96 insertions, 0 deletions
diff --git a/chrome/browser/metro_viewer/metro_viewer_process_host_win.cc b/chrome/browser/metro_viewer/metro_viewer_process_host_win.cc
new file mode 100644
index 0000000..bfbfe5f
--- /dev/null
+++ b/chrome/browser/metro_viewer/metro_viewer_process_host_win.cc
@@ -0,0 +1,55 @@
+// Copyright 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 "chrome/browser/metro_viewer/metro_viewer_process_host_win.h"
+
+#include "base/logging.h"
+#include "content/public/browser/browser_thread.h"
+#include "ipc/ipc_channel_proxy.h"
+#include "ui/metro_viewer/metro_viewer_messages.h"
+#include "ui/surface/accelerated_surface_win.h"
+
+MetroViewerProcessHost::MetroViewerProcessHost() {
+ channel_.reset(new IPC::ChannelProxy(
+ // TODO(scottmg): Need to have a secure way to randomize and request
+ // this name from the viewer-side.
+ "viewer",
+ IPC::Channel::MODE_NAMED_SERVER,
+ this,
+ content::BrowserThread::GetMessageLoopProxyForThread(
+ content::BrowserThread::IO)));
+}
+
+MetroViewerProcessHost::~MetroViewerProcessHost() {
+}
+
+bool MetroViewerProcessHost::Send(IPC::Message* msg) {
+ return channel_->Send(msg);
+}
+
+bool MetroViewerProcessHost::OnMessageReceived(const IPC::Message& message) {
+ DCHECK(CalledOnValidThread());
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(MetroViewerProcessHost, message)
+ IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SetTargetSurface, OnSetTargetSurface)
+ IPC_MESSAGE_HANDLER(MetroViewerHostMsg_MouseEvent, OnMouseEvent)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void MetroViewerProcessHost::OnSetTargetSurface(
+ gfx::NativeViewId target_surface) {
+ DLOG(INFO) << __FUNCTION__ << ", target_surface = " << target_surface;
+ HWND hwnd = reinterpret_cast<HWND>(target_surface);
+
+ scoped_refptr<AcceleratedPresenter> any_window =
+ AcceleratedPresenter::GetForWindow(NULL);
+ any_window->SetNewTargetWindow(hwnd);
+}
+
+void MetroViewerProcessHost::OnMouseEvent(
+ int msg, WPARAM w_param, LPARAM l_param) {
+ // TODO(scottmg): Pass to window.
+}
diff --git a/chrome/browser/metro_viewer/metro_viewer_process_host_win.h b/chrome/browser/metro_viewer/metro_viewer_process_host_win.h
new file mode 100644
index 0000000..076d61b
--- /dev/null
+++ b/chrome/browser/metro_viewer/metro_viewer_process_host_win.h
@@ -0,0 +1,41 @@
+// Copyright 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.
+
+#ifndef CHROME_BROWSER_METRO_VIEWER_METRO_VIEWER_PROCESS_HOST_WIN_H_
+#define CHROME_BROWSER_METRO_VIEWER_METRO_VIEWER_PROCESS_HOST_WIN_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/threading/non_thread_safe.h"
+#include "ipc/ipc_listener.h"
+#include "ipc/ipc_sender.h"
+#include "ui/gfx/native_widget_types.h"
+
+namespace IPC {
+class ChannelProxy;
+}
+
+class MetroViewerProcessHost : public IPC::Listener,
+ public IPC::Sender,
+ public base::NonThreadSafe {
+ public:
+ MetroViewerProcessHost();
+ virtual ~MetroViewerProcessHost();
+
+ // IPC::Sender implementation.
+ virtual bool Send(IPC::Message* msg) OVERRIDE;
+
+ // IPC::Listener implementation.
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+
+ private:
+ void OnSetTargetSurface(gfx::NativeViewId target_surface);
+ void OnMouseEvent(int msg, WPARAM w_param, LPARAM l_param);
+
+ scoped_ptr<IPC::ChannelProxy> channel_;
+
+ DISALLOW_COPY_AND_ASSIGN(MetroViewerProcessHost);
+};
+
+#endif // CHROME_BROWSER_METRO_VIEWER_METRO_VIEWER_PROCESS_HOST_WIN_H_