| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/api/messaging/native_message_port.h" | 5 #include "chrome/browser/extensions/api/messaging/native_message_port.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| 11 #include "base/thread_task_runner_handle.h" | 11 #include "base/thread_task_runner_handle.h" |
| 12 #include "chrome/browser/extensions/api/messaging/native_message_process_host.h" | 12 #include "chrome/browser/extensions/api/messaging/native_message_process_host.h" |
| 13 #include "content/public/browser/browser_thread.h" | 13 #include "content/public/browser/browser_thread.h" |
| 14 | 14 |
| 15 namespace extensions { | 15 namespace extensions { |
| 16 | 16 |
| 17 // Handles jumping between the |host_task_runner| and the | 17 // Handles jumping between the |host_task_runner| and the |
| 18 // |message_service_task_runner|. | 18 // |message_service_task_runner|. |
| 19 // All methods on the host interface should be called on |host_task_runner|. | 19 // All methods on the host interface should be called on |host_task_runner|. |
| 20 // All methods on |port| (that calls into MessageServices) should be called | 20 // All methods on |port| (that calls into MessageServices) should be called |
| 21 // on |message_service_task_runner|. | 21 // on |message_service_task_runner|. |
| 22 class NativeMessagePort::Core : public NativeMessageHost::Client { | 22 class NativeMessagePort::Core : public NativeMessageHost::Client { |
| 23 public: | 23 public: |
| 24 Core( | 24 Core( |
| 25 scoped_ptr<NativeMessageHost> host, | 25 std::unique_ptr<NativeMessageHost> host, |
| 26 base::WeakPtr<NativeMessagePort> port, | 26 base::WeakPtr<NativeMessagePort> port, |
| 27 scoped_refptr<base::SingleThreadTaskRunner> message_service_task_runner_); | 27 scoped_refptr<base::SingleThreadTaskRunner> message_service_task_runner_); |
| 28 ~Core() override; | 28 ~Core() override; |
| 29 | 29 |
| 30 void OnMessageFromChrome(const std::string& message); | 30 void OnMessageFromChrome(const std::string& message); |
| 31 | 31 |
| 32 // NativeMessageHost::Client implementation. | 32 // NativeMessageHost::Client implementation. |
| 33 void PostMessageFromNativeHost(const std::string& message) override; | 33 void PostMessageFromNativeHost(const std::string& message) override; |
| 34 void CloseChannel(const std::string& error_message) override; | 34 void CloseChannel(const std::string& error_message) override; |
| 35 | 35 |
| 36 private: | 36 private: |
| 37 scoped_ptr<NativeMessageHost> host_; | 37 std::unique_ptr<NativeMessageHost> host_; |
| 38 base::WeakPtr<NativeMessagePort> port_; | 38 base::WeakPtr<NativeMessagePort> port_; |
| 39 | 39 |
| 40 scoped_refptr<base::SingleThreadTaskRunner> message_service_task_runner_; | 40 scoped_refptr<base::SingleThreadTaskRunner> message_service_task_runner_; |
| 41 scoped_refptr<base::SingleThreadTaskRunner> host_task_runner_; | 41 scoped_refptr<base::SingleThreadTaskRunner> host_task_runner_; |
| 42 }; | 42 }; |
| 43 | 43 |
| 44 NativeMessagePort::Core::Core( | 44 NativeMessagePort::Core::Core( |
| 45 scoped_ptr<NativeMessageHost> host, | 45 std::unique_ptr<NativeMessageHost> host, |
| 46 base::WeakPtr<NativeMessagePort> port, | 46 base::WeakPtr<NativeMessagePort> port, |
| 47 scoped_refptr<base::SingleThreadTaskRunner> message_service_task_runner) | 47 scoped_refptr<base::SingleThreadTaskRunner> message_service_task_runner) |
| 48 : host_(std::move(host)), | 48 : host_(std::move(host)), |
| 49 port_(port), | 49 port_(port), |
| 50 message_service_task_runner_(message_service_task_runner), | 50 message_service_task_runner_(message_service_task_runner), |
| 51 host_task_runner_(host_->task_runner()) { | 51 host_task_runner_(host_->task_runner()) { |
| 52 DCHECK(message_service_task_runner_->BelongsToCurrentThread()); | 52 DCHECK(message_service_task_runner_->BelongsToCurrentThread()); |
| 53 host_task_runner_->PostTask(FROM_HERE, | 53 host_task_runner_->PostTask(FROM_HERE, |
| 54 base::Bind(&NativeMessageHost::Start, | 54 base::Bind(&NativeMessageHost::Start, |
| 55 base::Unretained(host_.get()), | 55 base::Unretained(host_.get()), |
| (...skipping 24 matching lines...) Expand all Loading... |
| 80 void NativeMessagePort::Core::CloseChannel(const std::string& error_message) { | 80 void NativeMessagePort::Core::CloseChannel(const std::string& error_message) { |
| 81 DCHECK(host_task_runner_->BelongsToCurrentThread()); | 81 DCHECK(host_task_runner_->BelongsToCurrentThread()); |
| 82 message_service_task_runner_->PostTask( | 82 message_service_task_runner_->PostTask( |
| 83 FROM_HERE, | 83 FROM_HERE, |
| 84 base::Bind(&NativeMessagePort::CloseChannel, port_, error_message)); | 84 base::Bind(&NativeMessagePort::CloseChannel, port_, error_message)); |
| 85 } | 85 } |
| 86 | 86 |
| 87 NativeMessagePort::NativeMessagePort( | 87 NativeMessagePort::NativeMessagePort( |
| 88 base::WeakPtr<MessageService> message_service, | 88 base::WeakPtr<MessageService> message_service, |
| 89 int port_id, | 89 int port_id, |
| 90 scoped_ptr<NativeMessageHost> native_message_host) | 90 std::unique_ptr<NativeMessageHost> native_message_host) |
| 91 : weak_message_service_(message_service), | 91 : weak_message_service_(message_service), |
| 92 host_task_runner_(native_message_host->task_runner()), | 92 host_task_runner_(native_message_host->task_runner()), |
| 93 port_id_(port_id), | 93 port_id_(port_id), |
| 94 weak_factory_(this) { | 94 weak_factory_(this) { |
| 95 core_.reset(new Core(std::move(native_message_host), | 95 core_.reset(new Core(std::move(native_message_host), |
| 96 weak_factory_.GetWeakPtr(), | 96 weak_factory_.GetWeakPtr(), |
| 97 base::ThreadTaskRunnerHandle::Get())); | 97 base::ThreadTaskRunnerHandle::Get())); |
| 98 } | 98 } |
| 99 | 99 |
| 100 NativeMessagePort::~NativeMessagePort() { | 100 NativeMessagePort::~NativeMessagePort() { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 125 } | 125 } |
| 126 | 126 |
| 127 void NativeMessagePort::CloseChannel(const std::string& error_message) { | 127 void NativeMessagePort::CloseChannel(const std::string& error_message) { |
| 128 DCHECK(thread_checker_.CalledOnValidThread()); | 128 DCHECK(thread_checker_.CalledOnValidThread()); |
| 129 if (weak_message_service_) { | 129 if (weak_message_service_) { |
| 130 weak_message_service_->CloseChannel(port_id_, error_message); | 130 weak_message_service_->CloseChannel(port_id_, error_message); |
| 131 } | 131 } |
| 132 } | 132 } |
| 133 | 133 |
| 134 } // namespace extensions | 134 } // namespace extensions |
| OLD | NEW |