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

Side by Side Diff: sync/internal_api/http_bridge_unittest.cc

Issue 1330443002: Report data usage UMA for Chrome services (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@NewArchServices
Patch Set: Do the necessary plumbing for sync service. Created 5 years, 3 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "base/callback.h"
5 #include "base/metrics/field_trial.h" 6 #include "base/metrics/field_trial.h"
6 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
7 #include "base/synchronization/waitable_event.h" 8 #include "base/synchronization/waitable_event.h"
8 #include "base/test/mock_entropy_provider.h" 9 #include "base/test/mock_entropy_provider.h"
9 #include "base/threading/thread.h" 10 #include "base/threading/thread.h"
10 #include "net/http/http_response_headers.h" 11 #include "net/http/http_response_headers.h"
11 #include "net/test/spawned_test_server/spawned_test_server.h" 12 #include "net/test/spawned_test_server/spawned_test_server.h"
12 #include "net/url_request/test_url_fetcher_factory.h" 13 #include "net/url_request/test_url_fetcher_factory.h"
13 #include "net/url_request/url_fetcher_delegate.h" 14 #include "net/url_request/url_fetcher_delegate.h"
14 #include "net/url_request/url_request_test_util.h" 15 #include "net/url_request/url_request_test_util.h"
15 #include "sync/internal_api/public/base/cancelation_signal.h" 16 #include "sync/internal_api/public/base/cancelation_signal.h"
16 #include "sync/internal_api/public/http_bridge.h" 17 #include "sync/internal_api/public/http_bridge.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 #include "third_party/zlib/zlib.h" 19 #include "third_party/zlib/zlib.h"
19 20
21 namespace net {
22 class URLFetcher;
23 }
24
20 namespace syncer { 25 namespace syncer {
21 26
22 namespace { 27 namespace {
23 28
24 // TODO(timsteele): Should use PathService here. See Chromium Issue 3113. 29 // TODO(timsteele): Should use PathService here. See Chromium Issue 3113.
25 const base::FilePath::CharType kDocRoot[] = 30 const base::FilePath::CharType kDocRoot[] =
26 FILE_PATH_LITERAL("chrome/test/data"); 31 FILE_PATH_LITERAL("chrome/test/data");
27 32
28 // ----------------------------------------------------------------------------- 33 // -----------------------------------------------------------------------------
29 // The rest of the code in the anon namespace is copied from 34 // The rest of the code in the anon namespace is copied from
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 } 141 }
137 io_thread_.Stop(); 142 io_thread_.Stop();
138 } 143 }
139 144
140 HttpBridge* BuildBridge() { 145 HttpBridge* BuildBridge() {
141 if (!fake_default_request_context_getter_) { 146 if (!fake_default_request_context_getter_) {
142 fake_default_request_context_getter_ = 147 fake_default_request_context_getter_ =
143 new net::TestURLRequestContextGetter(io_thread_.task_runner()); 148 new net::TestURLRequestContextGetter(io_thread_.task_runner());
144 fake_default_request_context_getter_->AddRef(); 149 fake_default_request_context_getter_->AddRef();
145 } 150 }
146 HttpBridge* bridge = 151 HttpBridge* bridge = new HttpBridge(
147 new HttpBridge(kUserAgent, 152 kUserAgent, fake_default_request_context_getter_,
148 fake_default_request_context_getter_, 153 NetworkTimeUpdateCallback(), base::Callback<void(net::URLFetcher*)>());
149 NetworkTimeUpdateCallback());
150 return bridge; 154 return bridge;
151 } 155 }
152 156
153 static void Abort(HttpBridge* bridge) { 157 static void Abort(HttpBridge* bridge) {
154 bridge->Abort(); 158 bridge->Abort();
155 } 159 }
156 160
157 // Used by AbortAndReleaseBeforeFetchCompletes to test an interesting race 161 // Used by AbortAndReleaseBeforeFetchCompletes to test an interesting race
158 // condition. 162 // condition.
159 void RunSyncThreadBridgeUseTest(base::WaitableEvent* signal_when_created, 163 void RunSyncThreadBridgeUseTest(base::WaitableEvent* signal_when_created,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 204
201 // An HttpBridge that doesn't actually make network requests and just calls 205 // An HttpBridge that doesn't actually make network requests and just calls
202 // back with dummy response info. 206 // back with dummy response info.
203 // TODO(tim): Instead of inheriting here we should inject a component 207 // TODO(tim): Instead of inheriting here we should inject a component
204 // responsible for the MakeAsynchronousPost bit. 208 // responsible for the MakeAsynchronousPost bit.
205 class ShuntedHttpBridge : public HttpBridge { 209 class ShuntedHttpBridge : public HttpBridge {
206 public: 210 public:
207 // If |never_finishes| is true, the simulated request never actually 211 // If |never_finishes| is true, the simulated request never actually
208 // returns. 212 // returns.
209 ShuntedHttpBridge(net::URLRequestContextGetter* baseline_context_getter, 213 ShuntedHttpBridge(net::URLRequestContextGetter* baseline_context_getter,
210 MAYBE_SyncHttpBridgeTest* test, bool never_finishes) 214 MAYBE_SyncHttpBridgeTest* test,
215 bool never_finishes)
211 : HttpBridge(kUserAgent, 216 : HttpBridge(kUserAgent,
212 baseline_context_getter, 217 baseline_context_getter,
213 NetworkTimeUpdateCallback()), 218 NetworkTimeUpdateCallback(),
214 test_(test), never_finishes_(never_finishes) { } 219 base::Callback<void(net::URLFetcher*)>()),
220 test_(test),
221 never_finishes_(never_finishes) {}
222
215 protected: 223 protected:
216 void MakeAsynchronousPost() override { 224 void MakeAsynchronousPost() override {
217 ASSERT_TRUE(base::MessageLoop::current() == test_->GetIOThreadLoop()); 225 ASSERT_TRUE(base::MessageLoop::current() == test_->GetIOThreadLoop());
218 if (never_finishes_) 226 if (never_finishes_)
219 return; 227 return;
220 228
221 // We don't actually want to make a request for this test, so just callback 229 // We don't actually want to make a request for this test, so just callback
222 // as if it completed. 230 // as if it completed.
223 test_->GetIOThreadLoop()->PostTask(FROM_HERE, 231 test_->GetIOThreadLoop()->PostTask(FROM_HERE,
224 base::Bind(&ShuntedHttpBridge::CallOnURLFetchComplete, this)); 232 base::Bind(&ShuntedHttpBridge::CallOnURLFetchComplete, this));
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 net::URLRequestContextGetter* baseline_context_getter, 580 net::URLRequestContextGetter* baseline_context_getter,
573 CancelationSignal* factory_cancelation_signal, 581 CancelationSignal* factory_cancelation_signal,
574 syncer::HttpPostProviderFactory** bridge_factory_out, 582 syncer::HttpPostProviderFactory** bridge_factory_out,
575 syncer::HttpPostProviderInterface** bridge_out, 583 syncer::HttpPostProviderInterface** bridge_out,
576 base::WaitableEvent* signal_when_created, 584 base::WaitableEvent* signal_when_created,
577 base::WaitableEvent* wait_for_shutdown) { 585 base::WaitableEvent* wait_for_shutdown) {
578 scoped_ptr<syncer::HttpBridgeFactory> bridge_factory( 586 scoped_ptr<syncer::HttpBridgeFactory> bridge_factory(
579 new syncer::HttpBridgeFactory(baseline_context_getter, 587 new syncer::HttpBridgeFactory(baseline_context_getter,
580 NetworkTimeUpdateCallback(), 588 NetworkTimeUpdateCallback(),
581 factory_cancelation_signal)); 589 factory_cancelation_signal));
582 bridge_factory->Init("test"); 590 bridge_factory->Init("test", base::Callback<void(net::URLFetcher*)>());
583 *bridge_factory_out = bridge_factory.get(); 591 *bridge_factory_out = bridge_factory.get();
584 592
585 HttpPostProviderInterface* bridge = bridge_factory->Create(); 593 HttpPostProviderInterface* bridge = bridge_factory->Create();
586 *bridge_out = bridge; 594 *bridge_out = bridge;
587 595
588 signal_when_created->Signal(); 596 signal_when_created->Signal();
589 wait_for_shutdown->Wait(); 597 wait_for_shutdown->Wait();
590 598
591 bridge_factory->Destroy(bridge); 599 bridge_factory->Destroy(bridge);
592 } 600 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 new HttpBridgeFactory(baseline_context_getter.get(), 674 new HttpBridgeFactory(baseline_context_getter.get(),
667 NetworkTimeUpdateCallback(), 675 NetworkTimeUpdateCallback(),
668 &release_request_context_signal)); 676 &release_request_context_signal));
669 677
670 // UI Thread: A very early shutdown request arrives and executes on the UI 678 // UI Thread: A very early shutdown request arrives and executes on the UI
671 // thread before the posted sync thread task is run. 679 // thread before the posted sync thread task is run.
672 release_request_context_signal.Signal(); 680 release_request_context_signal.Signal();
673 681
674 // Sync thread: Finally run the posted task, only to find that our 682 // Sync thread: Finally run the posted task, only to find that our
675 // HttpBridgeFactory has been neutered. Should not crash. 683 // HttpBridgeFactory has been neutered. Should not crash.
676 factory->Init("TestUserAgent"); 684 factory->Init("TestUserAgent", base::Callback<void(net::URLFetcher*)>());
677 685
678 // At this point, attempting to use the factory would trigger a crash. Both 686 // At this point, attempting to use the factory would trigger a crash. Both
679 // this test and the real world code should make sure this never happens. 687 // this test and the real world code should make sure this never happens.
680 }; 688 };
681 689
682 } // namespace syncer 690 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698