blob: 43b72b9005f1288ce1b70145217c6a4b888a5d7c [file] [log] [blame]
[email protected]87ab41e72012-01-04 18:45:111// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]73852b8f2010-05-14 00:38:122// 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/printing/print_dialog_cloud.h"
[email protected]443e9312013-05-06 06:17:346
[email protected]ba4fc242011-10-04 18:56:567#include "base/bind.h"
skyostil02598352015-06-12 12:37:258#include "base/thread_task_runner_handle.h"
[email protected]4c2eb402014-06-13 02:18:569#include "chrome/browser/browser_process.h"
[email protected]8ecad5e2010-12-02 21:18:3310#include "chrome/browser/profiles/profile.h"
[email protected]6c465292014-01-14 15:38:3111#include "chrome/browser/ui/browser.h"
[email protected]8c885f662014-07-04 16:37:3412#include "chrome/browser/ui/browser_window.h"
[email protected]09cff78782014-04-20 22:04:4813#include "components/cloud_devices/common/cloud_devices_urls.h"
[email protected]8e44a5b02014-06-19 19:03:2414#include "components/google/core/browser/google_util.h"
[email protected]8c885f662014-07-04 16:37:3415#include "components/signin/core/common/profile_management_switches.h"
[email protected]c38831a12011-10-28 12:44:4916#include "content/public/browser/browser_thread.h"
[email protected]0ec4898e2011-12-30 21:09:2417#include "content/public/browser/web_contents.h"
[email protected]6c465292014-01-14 15:38:3118#include "content/public/browser/web_contents_observer.h"
[email protected]520c2022012-03-15 00:13:1519
vitalybuka66de8e32015-06-26 20:58:5320namespace print_dialog_cloud {
[email protected]631bb742011-11-02 11:29:3921
[email protected]6c465292014-01-14 15:38:3122namespace {
23
[email protected]6c465292014-01-14 15:38:3124class SignInObserver : public content::WebContentsObserver {
25 public:
26 SignInObserver(content::WebContents* web_contents,
[email protected]6c465292014-01-14 15:38:3127 const base::Closure& callback)
28 : WebContentsObserver(web_contents),
[email protected]6c465292014-01-14 15:38:3129 callback_(callback),
30 weak_ptr_factory_(this) {
31 }
32
33 private:
34 // Overridden from content::WebContentsObserver:
dchengdf7e44a72014-10-21 23:50:1935 void DidNavigateMainFrame(
[email protected]6c465292014-01-14 15:38:3136 const content::LoadCommittedDetails& details,
mostynb2b52d1db2014-10-07 02:47:1737 const content::FrameNavigateParams& params) override {
vitalybuka66de8e32015-06-26 20:58:5338 if (cloud_devices::IsCloudPrintURL(params.url)) {
skyostil02598352015-06-12 12:37:2539 base::ThreadTaskRunnerHandle::Get()->PostTask(
40 FROM_HERE, base::Bind(&SignInObserver::OnSignIn,
41 weak_ptr_factory_.GetWeakPtr()));
[email protected]6c465292014-01-14 15:38:3142 }
43 }
44
dchengdf7e44a72014-10-21 23:50:1945 void WebContentsDestroyed() override { delete this; }
[email protected]6c465292014-01-14 15:38:3146
47 void OnSignIn() {
48 callback_.Run();
49 if (web_contents())
50 web_contents()->Close();
51 }
52
53 GURL cloud_print_url_;
54 base::Closure callback_;
55 base::WeakPtrFactory<SignInObserver> weak_ptr_factory_;
56
57 DISALLOW_COPY_AND_ASSIGN(SignInObserver);
58};
59
60} // namespace
61
[email protected]6c465292014-01-14 15:38:3162void CreateCloudPrintSigninTab(Browser* browser,
[email protected]7b92eea9e2014-04-01 09:17:1163 bool add_account,
[email protected]6c465292014-01-14 15:38:3164 const base::Closure& callback) {
vitalybuka66de8e32015-06-26 20:58:5365 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
[email protected]8c885f662014-07-04 16:37:3466 if (switches::IsEnableAccountConsistency() &&
67 !browser->profile()->IsOffTheRecord()) {
68 browser->window()->ShowAvatarBubbleFromAvatarButton(
69 add_account ? BrowserWindow::AVATAR_BUBBLE_MODE_ADD_ACCOUNT
70 : BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN,
71 signin::ManageAccountsParams());
72 } else {
73 GURL url = add_account ? cloud_devices::GetCloudPrintAddAccountURL()
74 : cloud_devices::GetCloudPrintSigninURL();
75 content::WebContents* web_contents =
76 browser->OpenURL(content::OpenURLParams(
77 google_util::AppendGoogleLocaleParam(
78 url, g_browser_process->GetApplicationLocale()),
79 content::Referrer(),
80 NEW_FOREGROUND_TAB,
Sylvain Defresnec6ccc77d2014-09-19 10:19:3581 ui::PAGE_TRANSITION_AUTO_BOOKMARK,
[email protected]8c885f662014-07-04 16:37:3482 false));
vitalybuka66de8e32015-06-26 20:58:5383 new SignInObserver(web_contents, callback);
[email protected]8c885f662014-07-04 16:37:3484 }
[email protected]4cd49022012-01-19 20:37:3785}
86
[email protected]228f0f02013-11-15 05:58:3687} // namespace print_dialog_cloud