1// Copyright (c) 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#ifndef CHROME_BROWSER_SIGNIN_SIGNIN_GLOBAL_ERROR_H_
6#define CHROME_BROWSER_SIGNIN_SIGNIN_GLOBAL_ERROR_H_
7
8#include <set>
9#include "base/basictypes.h"
10#include "base/compiler_specific.h"
11#include "base/gtest_prod_util.h"
12#include "chrome/browser/ui/global_error/global_error.h"
13#include "components/keyed_service/core/keyed_service.h"
14#include "components/signin/core/browser/signin_error_controller.h"
15
16class Profile;
17
18// Shows auth errors on the wrench menu using a bubble view and a menu item.
19class SigninGlobalError : public GlobalErrorWithStandardBubble,
20                          public SigninErrorController::Observer,
21                          public KeyedService {
22 public:
23  SigninGlobalError(SigninErrorController* error_controller,
24                    Profile* profile);
25  virtual ~SigninGlobalError();
26
27  // Returns true if there is an authentication error.
28  bool HasError();
29
30  // Shows re-authentication UI to the user in an attempt to fix the error.
31  // The re-authentication UI will be shown in |browser|.
32  void AttemptToFixError(Browser* browser);
33
34 private:
35  FRIEND_TEST_ALL_PREFIXES(SigninGlobalErrorTest, NoErrorAuthStatusProviders);
36  FRIEND_TEST_ALL_PREFIXES(SigninGlobalErrorTest, ErrorAuthStatusProvider);
37  FRIEND_TEST_ALL_PREFIXES(SigninGlobalErrorTest, AuthStatusEnumerateAllErrors);
38
39  // KeyedService:
40  virtual void Shutdown() OVERRIDE;
41
42  // GlobalErrorWithStandardBubble:
43  virtual bool HasMenuItem() OVERRIDE;
44  virtual int MenuItemCommandID() OVERRIDE;
45  virtual base::string16 MenuItemLabel() OVERRIDE;
46  virtual void ExecuteMenuItem(Browser* browser) OVERRIDE;
47  virtual bool HasBubbleView() OVERRIDE;
48  virtual base::string16 GetBubbleViewTitle() OVERRIDE;
49  virtual std::vector<base::string16> GetBubbleViewMessages() OVERRIDE;
50  virtual base::string16 GetBubbleViewAcceptButtonLabel() OVERRIDE;
51  virtual base::string16 GetBubbleViewCancelButtonLabel() OVERRIDE;
52  virtual void OnBubbleViewDidClose(Browser* browser) OVERRIDE;
53  virtual void BubbleViewAcceptButtonPressed(Browser* browser) OVERRIDE;
54  virtual void BubbleViewCancelButtonPressed(Browser* browser) OVERRIDE;
55
56  // SigninErrorController::Observer:
57  virtual void OnErrorChanged() OVERRIDE;
58
59  // The Profile this service belongs to.
60  Profile* profile_;
61
62  // The SigninErrorController that provides auth status.
63  SigninErrorController* error_controller_;
64
65  // True if signin global error was added to the global error service.
66  bool is_added_to_global_error_service_;
67
68  DISALLOW_COPY_AND_ASSIGN(SigninGlobalError);
69};
70
71#endif  // CHROME_BROWSER_SIGNIN_SIGNIN_GLOBAL_ERROR_H_
72