| 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/renderer/request_sender.h" | 5 #include "extensions/renderer/request_sender.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram_macros.h" | 7 #include "base/metrics/histogram_macros.h" |
| 8 #include "base/timer/elapsed_timer.h" | 8 #include "base/timer/elapsed_timer.h" |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "content/public/renderer/render_frame.h" | 10 #include "content/public/renderer/render_frame.h" |
| 11 #include "extensions/common/constants.h" | 11 #include "extensions/common/constants.h" |
| 12 #include "extensions/common/extension_messages.h" | 12 #include "extensions/common/extension_messages.h" |
| 13 #include "extensions/renderer/extension_frame_helper.h" |
| 13 #include "extensions/renderer/script_context.h" | 14 #include "extensions/renderer/script_context.h" |
| 14 #include "third_party/WebKit/public/web/WebDocument.h" | 15 #include "third_party/WebKit/public/web/WebDocument.h" |
| 15 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 16 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
| 16 #include "third_party/WebKit/public/web/WebScopedUserGesture.h" | 17 #include "third_party/WebKit/public/web/WebScopedUserGesture.h" |
| 17 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h" | 18 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h" |
| 18 #include "third_party/WebKit/public/web/WebUserGestureToken.h" | 19 #include "third_party/WebKit/public/web/WebUserGestureToken.h" |
| 19 | 20 |
| 20 namespace extensions { | 21 namespace extensions { |
| 21 | 22 |
| 22 // Contains info relevant to a pending API request. | 23 // Contains info relevant to a pending API request. |
| 23 struct PendingRequest { | 24 struct PendingRequest { |
| 24 public: | 25 public: |
| 25 PendingRequest(const std::string& name, | 26 PendingRequest(const std::string& name, |
| 26 RequestSender::Source* source, | 27 RequestSender::Source* source, |
| 27 blink::WebUserGestureToken token) | 28 blink::WebUserGestureToken token) |
| 28 : name(name), source(source), token(token) {} | 29 : name(name), source(source), token(token) {} |
| 29 | 30 |
| 30 std::string name; | 31 std::string name; |
| 31 RequestSender::Source* source; | 32 RequestSender::Source* source; |
| 32 blink::WebUserGestureToken token; | 33 blink::WebUserGestureToken token; |
| 33 }; | 34 }; |
| 34 | 35 |
| 35 RequestSender::ScopedTabID::ScopedTabID(RequestSender* request_sender, | |
| 36 int tab_id) | |
| 37 : request_sender_(request_sender), | |
| 38 tab_id_(tab_id), | |
| 39 previous_tab_id_(request_sender->source_tab_id_) { | |
| 40 request_sender_->source_tab_id_ = tab_id; | |
| 41 } | |
| 42 | 36 |
| 43 RequestSender::ScopedTabID::~ScopedTabID() { | 37 RequestSender::RequestSender() {} |
| 44 DCHECK_EQ(tab_id_, request_sender_->source_tab_id_); | |
| 45 request_sender_->source_tab_id_ = previous_tab_id_; | |
| 46 } | |
| 47 | |
| 48 RequestSender::RequestSender() : source_tab_id_(-1) {} | |
| 49 | 38 |
| 50 RequestSender::~RequestSender() {} | 39 RequestSender::~RequestSender() {} |
| 51 | 40 |
| 52 void RequestSender::InsertRequest( | 41 void RequestSender::InsertRequest( |
| 53 int request_id, | 42 int request_id, |
| 54 std::unique_ptr<PendingRequest> pending_request) { | 43 std::unique_ptr<PendingRequest> pending_request) { |
| 55 DCHECK_EQ(0u, pending_requests_.count(request_id)); | 44 DCHECK_EQ(0u, pending_requests_.count(request_id)); |
| 56 pending_requests_[request_id] = std::move(pending_request); | 45 pending_requests_[request_id] = std::move(pending_request); |
| 57 } | 46 } |
| 58 | 47 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 | 88 |
| 100 GURL source_url; | 89 GURL source_url; |
| 101 if (blink::WebLocalFrame* webframe = context->web_frame()) | 90 if (blink::WebLocalFrame* webframe = context->web_frame()) |
| 102 source_url = webframe->document().url(); | 91 source_url = webframe->document().url(); |
| 103 | 92 |
| 104 InsertRequest(request_id, | 93 InsertRequest(request_id, |
| 105 base::MakeUnique<PendingRequest>( | 94 base::MakeUnique<PendingRequest>( |
| 106 name, source, | 95 name, source, |
| 107 blink::WebUserGestureIndicator::currentUserGestureToken())); | 96 blink::WebUserGestureIndicator::currentUserGestureToken())); |
| 108 | 97 |
| 98 int tab_id = -1; |
| 99 if (render_frame) { |
| 100 ExtensionFrameHelper* frame_helper = |
| 101 ExtensionFrameHelper::Get(render_frame); |
| 102 DCHECK(frame_helper); |
| 103 tab_id = frame_helper->tab_id(); |
| 104 } |
| 105 |
| 109 ExtensionHostMsg_Request_Params params; | 106 ExtensionHostMsg_Request_Params params; |
| 110 params.name = name; | 107 params.name = name; |
| 111 params.arguments.Swap(value_args); | 108 params.arguments.Swap(value_args); |
| 112 params.extension_id = context->GetExtensionID(); | 109 params.extension_id = context->GetExtensionID(); |
| 113 params.source_url = source_url; | 110 params.source_url = source_url; |
| 114 params.source_tab_id = source_tab_id_; | 111 params.source_tab_id = tab_id; |
| 115 params.request_id = request_id; | 112 params.request_id = request_id; |
| 116 params.has_callback = has_callback; | 113 params.has_callback = has_callback; |
| 117 params.user_gesture = | 114 params.user_gesture = |
| 118 blink::WebUserGestureIndicator::isProcessingUserGesture(); | 115 blink::WebUserGestureIndicator::isProcessingUserGesture(); |
| 119 | 116 |
| 120 // Set Service Worker specific params to default values. | 117 // Set Service Worker specific params to default values. |
| 121 params.worker_thread_id = -1; | 118 params.worker_thread_id = -1; |
| 122 params.service_worker_version_id = kInvalidServiceWorkerVersionId; | 119 params.service_worker_version_id = kInvalidServiceWorkerVersionId; |
| 123 | 120 |
| 124 SendRequest(render_frame, for_io_thread, params); | 121 SendRequest(render_frame, for_io_thread, params); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 for (PendingRequestMap::iterator it = pending_requests_.begin(); | 159 for (PendingRequestMap::iterator it = pending_requests_.begin(); |
| 163 it != pending_requests_.end();) { | 160 it != pending_requests_.end();) { |
| 164 if (it->second->source == source) | 161 if (it->second->source == source) |
| 165 pending_requests_.erase(it++); | 162 pending_requests_.erase(it++); |
| 166 else | 163 else |
| 167 ++it; | 164 ++it; |
| 168 } | 165 } |
| 169 } | 166 } |
| 170 | 167 |
| 171 } // namespace extensions | 168 } // namespace extensions |
| OLD | NEW |