123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifndef CHROME_BROWSER_UI_ANDROID_INFOBARS_AUTO_LOGIN_PROMPTER_H_
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define CHROME_BROWSER_UI_ANDROID_INFOBARS_AUTO_LOGIN_PROMPTER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/auto_login_infobar_delegate.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h"
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RenderViewHost;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequest;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class displays an infobar that allows the user to automatically login to
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the currently loaded page with one click.  This is used when the browser
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// detects that the user has navigated to a login page and that there are stored
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// tokens that would allow a one-click login.
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AutoLoginPrompter : public content::WebContentsObserver {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef AutoLoginInfoBarDelegate::Params Params;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Looks for the X-Auto-Login response header in the request, and if found,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // tries to display an infobar in the tab contents identified by the
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // child/route id.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void ShowInfoBarIfPossible(net::URLRequest* request,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int child_id,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int route_id);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class AutoLoginPrompterTest;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AutoLoginPrompter(content::WebContents* web_contents,
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    const Params& params,
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    const GURL& url);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~AutoLoginPrompter();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void ShowInfoBarUIThread(Params params,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const GURL& url,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  int child_id,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  int route_id);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidStopLoading(
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::RenderViewHost* render_view_host) OVERRIDE;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void WebContentsDestroyed() OVERRIDE;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Add the infobar to the WebContents, if it's still needed.
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddInfoBarToWebContents();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Params params_;
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const GURL url_;
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool infobar_shown_;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AutoLoginPrompter);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif  // CHROME_BROWSER_UI_ANDROID_INFOBARS_AUTO_LOGIN_PROMPTER_H_
69