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 |