Add API messages for IPC.
authorCheng Zhao <zcbenz@gmail.com>
Sun, 21 Apr 2013 03:01:04 +0000 (11:01 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Sun, 21 Apr 2013 03:01:04 +0000 (11:01 +0800)
atom.gyp
browser/api/atom_api_extensions.h
browser/native_window.cc
browser/native_window.h
common/api_messages.cc [new file with mode: 0644]
common/api_messages.h [new file with mode: 0644]

index 4317261..0944c16 100644 (file)
--- a/atom.gyp
+++ b/atom.gyp
@@ -40,6 +40,8 @@
       'browser/native_window_mac.h',
       'browser/native_window_mac.mm',
       'browser/native_window_observer.h',
+      'common/api_messages.cc',
+      'common/api_messages.h',
       'common/node_bindings.cc',
       'common/node_bindings.h',
       'common/node_bindings_mac.h',
index 0b05901..9e83337 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// Multiply-included file, no traditional include guard.
+
 // Used by atom_extensions.cc to declare a list of built-in modules of Atom.
 
 NODE_EXT_LIST_START
index 91e53b7..3e301ee 100644 (file)
@@ -32,6 +32,9 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
   web_contents->SetDelegate(this);
 
   // Add window as an observer of the web contents.
+  content::WebContentsObserver::Observe(web_contents);
+
+  // Get notified of title updated message.
   registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED,
       content::Source<content::WebContents>(web_contents));
 }
@@ -125,6 +128,10 @@ void NativeWindow::WebContentsCreated(
   window->InitFromOptions(options.get());
 }
 
+bool NativeWindow::OnMessageReceived(const IPC::Message& message) {
+  return false;
+}
+
 void NativeWindow::Observe(int type,
                            const content::NotificationSource& source,
                            const content::NotificationDetails& details) {
index 40be890..ad46d14 100644 (file)
@@ -15,6 +15,7 @@
 #include "content/public/browser/notification_registrar.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/web_contents_delegate.h"
+#include "content/public/browser/web_contents_observer.h"
 
 namespace base {
 class DictionaryValue;
@@ -38,6 +39,7 @@ class Size;
 namespace atom {
 
 class NativeWindow : public content::WebContentsDelegate,
+                     public content::WebContentsObserver,
                      public content::NotificationObserver {
  public:
   virtual ~NativeWindow();
@@ -108,6 +110,9 @@ class NativeWindow : public content::WebContentsDelegate,
                                   const GURL& target_url,
                                   content::WebContents* new_contents) OVERRIDE;
 
+  // Implementations of content::WebContentsObserver.
+  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+
   // Implementations of content::NotificationObserver
   virtual void Observe(int type,
                        const content::NotificationSource& source,
diff --git a/common/api_messages.cc b/common/api_messages.cc
new file mode 100644 (file)
index 0000000..ee9b250
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright (c) 2013 GitHub, Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Get basic type definitions.
+#define IPC_MESSAGE_IMPL
+#include "common/api_messages.h"
+
+// Generate constructors.
+#include "ipc/struct_constructor_macros.h"
+#include "common/api_messages.h"
+
+// Generate destructors.
+#include "ipc/struct_destructor_macros.h"
+#include "common/api_messages.h"
+
+// Generate param traits write methods.
+#include "ipc/param_traits_write_macros.h"
+namespace IPC {
+#include "common/api_messages.h"
+}  // namespace IPC
+
+// Generate param traits read methods.
+#include "ipc/param_traits_read_macros.h"
+namespace IPC {
+#include "common/api_messages.h"
+}  // namespace IPC
+
+// Generate param traits log methods.
+#include "ipc/param_traits_log_macros.h"
+namespace IPC {
+#include "common/api_messages.h"
+}  // namespace IPC
diff --git a/common/api_messages.h b/common/api_messages.h
new file mode 100644 (file)
index 0000000..05f9011
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright (c) 2013 GitHub, Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Multiply-included file, no traditional include guard.
+
+#include <string>
+
+#include "base/values.h"
+#include "content/public/common/common_param_traits.h"
+#include "ipc/ipc_message_macros.h"
+
+// The message starter should be declared in ipc/ipc_message_start.h. Since
+// we don't wan't to patch Chromium, we just pretend to be Content Shell.
+
+#define IPC_MESSAGE_START ShellMsgStart
+
+IPC_SYNC_MESSAGE_CONTROL2_1(AtomViewHostMsg_Allocate_Object,
+                            std::string /* type name */,
+                            DictionaryValue /* options */,
+                            int /* object id */)
+
+IPC_SYNC_MESSAGE_CONTROL1_0(AtomViewHostMsg_Deallocate_Object,
+                            int /* object id */)
+
+IPC_SYNC_MESSAGE_CONTROL3_1(AtomViewHostMsg_Call_Object_Method,
+                            int /* object id */,
+                            std::string /* method name */,
+                            ListValue /* arguments */,
+                            DictionaryValue /* return value */)
+
+IPC_SYNC_MESSAGE_CONTROL2_1(AtomViewMsg_Callback,
+                            int /* callback id */,
+                            ListValue /* arguments */,
+                            DictionaryValue /* return value */)