Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(528)

Side by Side Diff: chrome/test/chromedriver/net/sync_websocket_impl.cc

Issue 1669453002: [chromedriver] Apply page load timeout to slow cross-process navigations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: pure virtual Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/test/chromedriver/net/sync_websocket_impl.h" 5 #include "chrome/test/chromedriver/net/sync_websocket_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
11 #include "base/synchronization/waitable_event.h" 11 #include "base/synchronization/waitable_event.h"
12 #include "chrome/test/chromedriver/net/timeout.h"
12 #include "net/base/net_errors.h" 13 #include "net/base/net_errors.h"
13 #include "net/url_request/url_request_context_getter.h" 14 #include "net/url_request/url_request_context_getter.h"
14 #include "url/gurl.h" 15 #include "url/gurl.h"
15 16
16 SyncWebSocketImpl::SyncWebSocketImpl( 17 SyncWebSocketImpl::SyncWebSocketImpl(
17 net::URLRequestContextGetter* context_getter) 18 net::URLRequestContextGetter* context_getter)
18 : core_(new Core(context_getter)) {} 19 : core_(new Core(context_getter)) {}
19 20
20 SyncWebSocketImpl::~SyncWebSocketImpl() {} 21 SyncWebSocketImpl::~SyncWebSocketImpl() {}
21 22
22 bool SyncWebSocketImpl::IsConnected() { 23 bool SyncWebSocketImpl::IsConnected() {
23 return core_->IsConnected(); 24 return core_->IsConnected();
24 } 25 }
25 26
26 bool SyncWebSocketImpl::Connect(const GURL& url) { 27 bool SyncWebSocketImpl::Connect(const GURL& url) {
27 return core_->Connect(url); 28 return core_->Connect(url);
28 } 29 }
29 30
30 bool SyncWebSocketImpl::Send(const std::string& message) { 31 bool SyncWebSocketImpl::Send(const std::string& message) {
31 return core_->Send(message); 32 return core_->Send(message);
32 } 33 }
33 34
34 SyncWebSocket::StatusCode SyncWebSocketImpl::ReceiveNextMessage( 35 SyncWebSocket::StatusCode SyncWebSocketImpl::ReceiveNextMessage(
35 std::string* message, const base::TimeDelta& timeout) { 36 std::string* message, const Timeout& timeout) {
36 return core_->ReceiveNextMessage(message, timeout); 37 return core_->ReceiveNextMessage(message, timeout);
37 } 38 }
38 39
39 bool SyncWebSocketImpl::HasNextMessage() { 40 bool SyncWebSocketImpl::HasNextMessage() {
40 return core_->HasNextMessage(); 41 return core_->HasNextMessage();
41 } 42 }
42 43
43 SyncWebSocketImpl::Core::Core(net::URLRequestContextGetter* context_getter) 44 SyncWebSocketImpl::Core::Core(net::URLRequestContextGetter* context_getter)
44 : context_getter_(context_getter), 45 : context_getter_(context_getter),
45 is_connected_(false), 46 is_connected_(false),
(...skipping 21 matching lines...) Expand all
67 context_getter_->GetNetworkTaskRunner()->PostTask( 68 context_getter_->GetNetworkTaskRunner()->PostTask(
68 FROM_HERE, 69 FROM_HERE,
69 base::Bind(&SyncWebSocketImpl::Core::SendOnIO, 70 base::Bind(&SyncWebSocketImpl::Core::SendOnIO,
70 this, message, &success, &event)); 71 this, message, &success, &event));
71 event.Wait(); 72 event.Wait();
72 return success; 73 return success;
73 } 74 }
74 75
75 SyncWebSocket::StatusCode SyncWebSocketImpl::Core::ReceiveNextMessage( 76 SyncWebSocket::StatusCode SyncWebSocketImpl::Core::ReceiveNextMessage(
76 std::string* message, 77 std::string* message,
77 const base::TimeDelta& timeout) { 78 const Timeout& timeout) {
78 base::AutoLock lock(lock_); 79 base::AutoLock lock(lock_);
79 base::TimeTicks deadline = base::TimeTicks::Now() + timeout;
80 base::TimeDelta next_wait = timeout;
81 while (received_queue_.empty() && is_connected_) { 80 while (received_queue_.empty() && is_connected_) {
81 base::TimeDelta next_wait = timeout.GetRemainingTime();
82 if (next_wait <= base::TimeDelta()) 82 if (next_wait <= base::TimeDelta())
83 return SyncWebSocket::kTimeout; 83 return SyncWebSocket::kTimeout;
84 on_update_event_.TimedWait(next_wait); 84 on_update_event_.TimedWait(next_wait);
85 next_wait = deadline - base::TimeTicks::Now();
86 } 85 }
87 if (!is_connected_) 86 if (!is_connected_)
88 return SyncWebSocket::kDisconnected; 87 return SyncWebSocket::kDisconnected;
89 *message = received_queue_.front(); 88 *message = received_queue_.front();
90 received_queue_.pop_front(); 89 received_queue_.pop_front();
91 return SyncWebSocket::kOk; 90 return SyncWebSocket::kOk;
92 } 91 }
93 92
94 bool SyncWebSocketImpl::Core::HasNextMessage() { 93 bool SyncWebSocketImpl::Core::HasNextMessage() {
95 base::AutoLock lock(lock_); 94 base::AutoLock lock(lock_);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 } 144 }
146 145
147 void SyncWebSocketImpl::Core::OnDestruct() const { 146 void SyncWebSocketImpl::Core::OnDestruct() const {
148 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner = 147 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner =
149 context_getter_->GetNetworkTaskRunner(); 148 context_getter_->GetNetworkTaskRunner();
150 if (network_task_runner->BelongsToCurrentThread()) 149 if (network_task_runner->BelongsToCurrentThread())
151 delete this; 150 delete this;
152 else 151 else
153 network_task_runner->DeleteSoon(FROM_HERE, this); 152 network_task_runner->DeleteSoon(FROM_HERE, this);
154 } 153 }
OLDNEW
« no previous file with comments | « chrome/test/chromedriver/net/sync_websocket_impl.h ('k') | chrome/test/chromedriver/net/sync_websocket_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698