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

Side by Side Diff: chrome/browser/chromeos/login/merge_session_xhr_request_waiter.cc

Issue 286933002: [cros login] Split login related classes into subfolders. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix includes in new tests Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/login/merge_session_xhr_request_waiter.h"
6
7 #include "base/bind.h"
8 #include "base/lazy_instance.h"
9 #include "base/logging.h"
10 #include "base/memory/weak_ptr.h"
11 #include "base/message_loop/message_loop.h"
12 #include "chrome/browser/chromeos/login/oauth2_login_manager.h"
13 #include "chrome/browser/chromeos/login/oauth2_login_manager_factory.h"
14 #include "content/public/browser/browser_thread.h"
15
16 using content::BrowserThread;
17
18 namespace chromeos {
19
20 namespace {
21
22 // Maximum time for delaying XHR requests.
23 const int kMaxRequestWaitTimeMS = 10000;
24
25 }
26
27 MergeSessionXHRRequestWaiter::MergeSessionXHRRequestWaiter(
28 Profile* profile,
29 const MergeSessionThrottle::CompletionCallback& callback)
30 : profile_(profile),
31 callback_(callback),
32 weak_ptr_factory_(this) {
33 }
34
35 MergeSessionXHRRequestWaiter::~MergeSessionXHRRequestWaiter() {
36 chromeos::OAuth2LoginManager* manager =
37 chromeos::OAuth2LoginManagerFactory::GetInstance()->GetForProfile(
38 profile_);
39 if (manager)
40 manager->RemoveObserver(this);
41 }
42
43 void MergeSessionXHRRequestWaiter::StartWaiting() {
44 OAuth2LoginManager* manager =
45 OAuth2LoginManagerFactory::GetInstance()->GetForProfile(profile_);
46 if (manager && manager->ShouldBlockTabLoading()) {
47 DVLOG(1) << "Waiting for XHR request throttle";
48 manager->AddObserver(this);
49 BrowserThread::PostDelayedTask(
50 BrowserThread::UI, FROM_HERE,
51 base::Bind(&MergeSessionXHRRequestWaiter::OnTimeout,
52 weak_ptr_factory_.GetWeakPtr()),
53 base::TimeDelta::FromMilliseconds(kMaxRequestWaitTimeMS));
54 } else {
55 NotifyBlockingDone();
56 }
57 }
58
59 void MergeSessionXHRRequestWaiter::OnSessionRestoreStateChanged(
60 Profile* user_profile,
61 OAuth2LoginManager::SessionRestoreState state) {
62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
63
64 OAuth2LoginManager* manager =
65 OAuth2LoginManagerFactory::GetInstance()->GetForProfile(profile_);
66 DVLOG(1) << "Merge session throttle should "
67 << (!manager->ShouldBlockTabLoading() ?
68 " NOT" : "")
69 << " be blocking now, "
70 << state;
71 if (!manager->ShouldBlockTabLoading()) {
72 DVLOG(1) << "Unblocking XHR request throttle due to session merge";
73 manager->RemoveObserver(this);
74 NotifyBlockingDone();
75 }
76 }
77
78 void MergeSessionXHRRequestWaiter::OnTimeout() {
79 DVLOG(1) << "Unblocking XHR request throttle due to timeout";
80 NotifyBlockingDone();
81 }
82
83 void MergeSessionXHRRequestWaiter::NotifyBlockingDone() {
84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
85 if (!callback_.is_null()) {
86 BrowserThread::PostTask(
87 BrowserThread::IO, FROM_HERE, callback_);
88 }
89 weak_ptr_factory_.InvalidateWeakPtrs();
90 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
91 }
92
93 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698