| // 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. | 
 |  | 
 | #ifndef CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PORT_H_ | 
 | #define CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PORT_H_ | 
 |  | 
 | #include "base/memory/ref_counted.h" | 
 | #include "base/memory/weak_ptr.h" | 
 | #include "base/threading/thread_checker.h" | 
 | #include "extensions/browser/api/messaging/message_port.h" | 
 | #include "extensions/common/api/messaging/port_id.h" | 
 |  | 
 | namespace base { | 
 | class SingleThreadTaskRunner; | 
 | } | 
 |  | 
 | namespace extensions { | 
 | class NativeMessageHost; | 
 |  | 
 | // A port that manages communication with a native application. | 
 | // All methods must be called on the UI Thread of the browser process. | 
 | class NativeMessagePort : public MessagePort { | 
 |  public: | 
 |   NativeMessagePort(base::WeakPtr<ChannelDelegate> channel_delegate, | 
 |                     const PortId& port_id, | 
 |                     std::unique_ptr<NativeMessageHost> native_message_host); | 
 |   ~NativeMessagePort() override; | 
 |  | 
 |   // MessagePort implementation. | 
 |   bool IsValidPort() override; | 
 |   void DispatchOnMessage(const Message& message) override; | 
 |  | 
 |  private: | 
 |   class Core; | 
 |   void PostMessageFromNativeHost(const std::string& message); | 
 |   void CloseChannel(const std::string& error_message); | 
 |  | 
 |   base::ThreadChecker thread_checker_; | 
 |   base::WeakPtr<ChannelDelegate> weak_channel_delegate_; | 
 |   scoped_refptr<base::SingleThreadTaskRunner> host_task_runner_; | 
 |   const PortId port_id_; | 
 |   std::unique_ptr<Core> core_; | 
 |  | 
 |   base::WeakPtrFactory<NativeMessagePort> weak_factory_; | 
 | }; | 
 |  | 
 | }  // namespace extensions | 
 |  | 
 | #endif  // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PORT_H_ |