172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_WEB_PAGE_SCREEN_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_LOGIN_WEB_PAGE_SCREEN_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/timer.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/screen_observer.h"
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents_delegate.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GURL;
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos {
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Base class for wizard screen that holds web page.
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WebPageScreen : public TabContentsDelegate {
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  explicit WebPageScreen() {}
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~WebPageScreen() {}
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Exits from the screen with the specified exit code.
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void CloseScreen(ScreenObserver::ExitCodes code) = 0;
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TabContentsDelegate implementation:
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OpenURLFromTab(TabContents* source,
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              const GURL& url, const GURL& referrer,
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              WindowOpenDisposition disposition,
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              PageTransition::Type transition) {}
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void NavigationStateChanged(const TabContents* source,
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                      unsigned changed_flags) = 0;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void AddNewContents(TabContents* source,
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              TabContents* new_contents,
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              WindowOpenDisposition disposition,
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              const gfx::Rect& initial_pos,
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              bool user_gesture) {}
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ActivateContents(TabContents* contents) {}
403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void DeactivateContents(TabContents* contents) {}
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void LoadingStateChanged(TabContents* source) = 0;
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void CloseContents(TabContents* source) {}
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool IsPopup(TabContents* source) { return false; }
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateTargetURL(TabContents* source, const GURL& url) {}
453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual bool ShouldAddNavigationToHistory(
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      const history::HistoryAddPageArgs& add_page_args,
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      NavigationType::Type navigation_type) {
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return false;
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void MoveContents(TabContents* source, const gfx::Rect& pos) {}
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool HandleContextMenu(const ContextMenuParams& params);
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Called by |timeout_timer_|. Stops page fetching and closes screen.
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void OnNetworkTimeout();
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Start/stop timeout timer.
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void StartTimeoutTimer();
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void StopTimeoutTimer();
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Timer used for network response timeout.
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  base::OneShotTimer<WebPageScreen> timeout_timer_;
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(WebPageScreen);
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace chromeos
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_WEB_PAGE_SCREEN_H_
70