| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/extension_function_dispatcher.h" | 5 #include "extensions/browser/extension_function_dispatcher.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/json/json_string_value_serializer.h" | 10 #include "base/json/json_string_value_serializer.h" |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 void RenderFrameDeleted( | 133 void RenderFrameDeleted( |
| 134 content::RenderFrameHost* render_frame_host) override { | 134 content::RenderFrameHost* render_frame_host) override { |
| 135 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 135 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 136 if (render_frame_host != render_frame_host_) | 136 if (render_frame_host != render_frame_host_) |
| 137 return; | 137 return; |
| 138 | 138 |
| 139 if (dispatcher_.get()) { | 139 if (dispatcher_.get()) { |
| 140 dispatcher_->ui_thread_response_callback_wrappers_ | 140 dispatcher_->ui_thread_response_callback_wrappers_ |
| 141 .erase(render_frame_host); | 141 .erase(render_frame_host); |
| 142 } | 142 } |
| 143 | |
| 144 delete this; | |
| 145 } | 143 } |
| 146 | 144 |
| 147 ExtensionFunction::ResponseCallback CreateCallback(int request_id) { | 145 ExtensionFunction::ResponseCallback CreateCallback(int request_id) { |
| 148 return base::Bind( | 146 return base::Bind( |
| 149 &UIThreadResponseCallbackWrapper::OnExtensionFunctionCompleted, | 147 &UIThreadResponseCallbackWrapper::OnExtensionFunctionCompleted, |
| 150 weak_ptr_factory_.GetWeakPtr(), | 148 weak_ptr_factory_.GetWeakPtr(), |
| 151 request_id); | 149 request_id); |
| 152 } | 150 } |
| 153 | 151 |
| 154 private: | 152 private: |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 if (render_frame_host) { | 361 if (render_frame_host) { |
| 364 // Extension API from a non Service Worker context, e.g. extension page, | 362 // Extension API from a non Service Worker context, e.g. extension page, |
| 365 // background page, content script. | 363 // background page, content script. |
| 366 UIThreadResponseCallbackWrapperMap::const_iterator iter = | 364 UIThreadResponseCallbackWrapperMap::const_iterator iter = |
| 367 ui_thread_response_callback_wrappers_.find(render_frame_host); | 365 ui_thread_response_callback_wrappers_.find(render_frame_host); |
| 368 UIThreadResponseCallbackWrapper* callback_wrapper = nullptr; | 366 UIThreadResponseCallbackWrapper* callback_wrapper = nullptr; |
| 369 if (iter == ui_thread_response_callback_wrappers_.end()) { | 367 if (iter == ui_thread_response_callback_wrappers_.end()) { |
| 370 callback_wrapper = | 368 callback_wrapper = |
| 371 new UIThreadResponseCallbackWrapper(AsWeakPtr(), render_frame_host); | 369 new UIThreadResponseCallbackWrapper(AsWeakPtr(), render_frame_host); |
| 372 ui_thread_response_callback_wrappers_[render_frame_host] = | 370 ui_thread_response_callback_wrappers_[render_frame_host] = |
| 373 callback_wrapper; | 371 base::WrapUnique(callback_wrapper); |
| 374 } else { | 372 } else { |
| 375 callback_wrapper = iter->second; | 373 callback_wrapper = iter->second.get(); |
| 376 } | 374 } |
| 377 DispatchWithCallbackInternal( | 375 DispatchWithCallbackInternal( |
| 378 params, render_frame_host, render_process_id, | 376 params, render_frame_host, render_process_id, |
| 379 callback_wrapper->CreateCallback(params.request_id)); | 377 callback_wrapper->CreateCallback(params.request_id)); |
| 380 } else { | 378 } else { |
| 381 // Extension API from Service Worker. | 379 // Extension API from Service Worker. |
| 382 DCHECK_NE(kInvalidServiceWorkerVersionId, params.service_worker_version_id); | 380 DCHECK_NE(kInvalidServiceWorkerVersionId, params.service_worker_version_id); |
| 383 WorkerResponseCallbackMapKey key(render_process_id, | 381 WorkerResponseCallbackMapKey key(render_process_id, |
| 384 params.service_worker_version_id); | 382 params.service_worker_version_id); |
| 385 UIThreadWorkerResponseCallbackWrapperMap::const_iterator iter = | 383 UIThreadWorkerResponseCallbackWrapperMap::const_iterator iter = |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 600 // static | 598 // static |
| 601 void ExtensionFunctionDispatcher::SendAccessDenied( | 599 void ExtensionFunctionDispatcher::SendAccessDenied( |
| 602 const ExtensionFunction::ResponseCallback& callback, | 600 const ExtensionFunction::ResponseCallback& callback, |
| 603 functions::HistogramValue histogram_value) { | 601 functions::HistogramValue histogram_value) { |
| 604 base::ListValue empty_list; | 602 base::ListValue empty_list; |
| 605 callback.Run(ExtensionFunction::FAILED, empty_list, | 603 callback.Run(ExtensionFunction::FAILED, empty_list, |
| 606 "Access to extension API denied.", histogram_value); | 604 "Access to extension API denied.", histogram_value); |
| 607 } | 605 } |
| 608 | 606 |
| 609 } // namespace extensions | 607 } // namespace extensions |
| OLD | NEW |