OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_INTENTS_REGISTER_INTENT_HANDLER_INFOBAR_DELEGATE_H_ | 5 #ifndef CHROME_BROWSER_INTENTS_REGISTER_INTENT_HANDLER_INFOBAR_DELEGATE_H_ |
6 #define CHROME_BROWSER_INTENTS_REGISTER_INTENT_HANDLER_INFOBAR_DELEGATE_H_ | 6 #define CHROME_BROWSER_INTENTS_REGISTER_INTENT_HANDLER_INFOBAR_DELEGATE_H_ |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/string16.h" | 9 #include "base/string16.h" |
10 #include "chrome/browser/api/infobars/confirm_infobar_delegate.h" | 10 #include "chrome/browser/api/infobars/confirm_infobar_delegate.h" |
11 #include "webkit/glue/web_intent_service_data.h" | 11 #include "webkit/glue/web_intent_service_data.h" |
12 | 12 |
| 13 #if defined(UNIT_TEST) |
| 14 #include "base/memory/scoped_ptr.h" |
| 15 #endif |
| 16 |
13 class WebIntentsRegistry; | 17 class WebIntentsRegistry; |
14 class FaviconService; | 18 class FaviconService; |
15 class GURL; | 19 class GURL; |
| 20 namespace content { |
| 21 class WebContents; |
| 22 } |
16 | 23 |
17 // The InfoBar used to request permission for a site to be registered as an | 24 // The InfoBar used to request permission for a site to be registered as an |
18 // Intent handler. | 25 // Intent handler. |
19 class RegisterIntentHandlerInfoBarDelegate : public ConfirmInfoBarDelegate { | 26 class RegisterIntentHandlerInfoBarDelegate : public ConfirmInfoBarDelegate { |
20 public: | 27 public: |
21 RegisterIntentHandlerInfoBarDelegate( | 28 // Checks whether the intent service specified by |data| exists. If not, and |
22 InfoBarService* infobar_service, | 29 // |web_contents| is in a non-incognito, web-intents-enabled profile, creates |
| 30 // a register intent handler delegate and adds it to the InfoBarService for |
| 31 // |web_contents|. |
| 32 static void Create(content::WebContents* web_contents, |
| 33 const webkit_glue::WebIntentServiceData& data); |
| 34 |
| 35 #if defined(UNIT_TEST) |
| 36 static scoped_ptr<RegisterIntentHandlerInfoBarDelegate> Create( |
23 WebIntentsRegistry* registry, | 37 WebIntentsRegistry* registry, |
24 const webkit_glue::WebIntentServiceData& service, | 38 const webkit_glue::WebIntentServiceData& data) { |
25 FaviconService* favicon_service, | 39 return scoped_ptr<RegisterIntentHandlerInfoBarDelegate>( |
26 const GURL& origin_url); | 40 new RegisterIntentHandlerInfoBarDelegate(NULL, registry, data, NULL, |
| 41 GURL())); |
| 42 } |
| 43 #endif |
27 | 44 |
28 // ConfirmInfoBarDelegate implementation. | 45 // ConfirmInfoBarDelegate implementation. |
29 virtual Type GetInfoBarType() const OVERRIDE; | 46 virtual Type GetInfoBarType() const OVERRIDE; |
30 virtual string16 GetMessageText() const OVERRIDE; | 47 virtual string16 GetMessageText() const OVERRIDE; |
31 virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; | 48 virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; |
32 virtual bool Accept() OVERRIDE; | 49 virtual bool Accept() OVERRIDE; |
33 virtual string16 GetLinkText() const OVERRIDE; | 50 virtual string16 GetLinkText() const OVERRIDE; |
34 virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; | 51 virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; |
35 | 52 |
36 // Shows the intent registration infobar if |service| has not already been | 53 private: |
37 // registered. | 54 RegisterIntentHandlerInfoBarDelegate( |
38 // |infobar_service| is the infobar controller for the tab in which the | |
39 // infobar may be shown. Must not be NULL. | |
40 // |registry| is the data source for web intents. Must not be NULL. | |
41 // |service| is the candidate service to show the infobar for. | |
42 // |favicon_service| is the favicon service to use. Must not be NULL. | |
43 // |origin_url| is the URL that the intent is registered from. | |
44 static void MaybeShowIntentInfoBar( | |
45 InfoBarService* infobar_service, | 55 InfoBarService* infobar_service, |
46 WebIntentsRegistry* registry, | 56 WebIntentsRegistry* registry, |
47 const webkit_glue::WebIntentServiceData& service, | 57 const webkit_glue::WebIntentServiceData& service, |
48 FaviconService* favicon_service, | 58 FaviconService* favicon_service, |
49 const GURL& origin_url); | 59 const GURL& origin_url); |
50 | 60 |
51 private: | 61 // Finishes the work of Create(). This is called back from the |
| 62 // WebIntentsRegistry once it determines whether the requested intent service |
| 63 // exists. |
| 64 static void CreateContinuation( |
| 65 InfoBarService* infobar_service, |
| 66 WebIntentsRegistry* registry, |
| 67 const webkit_glue::WebIntentServiceData& service, |
| 68 FaviconService* favicon_service, |
| 69 const GURL& origin_url, |
| 70 bool provider_exists); |
| 71 |
52 // The web intents registry to use. Weak pointer. | 72 // The web intents registry to use. Weak pointer. |
53 WebIntentsRegistry* registry_; | 73 WebIntentsRegistry* registry_; |
54 | 74 |
55 // The cached intent service data bundle passed up from the renderer. | 75 // The cached intent service data bundle passed up from the renderer. |
56 webkit_glue::WebIntentServiceData service_; | 76 webkit_glue::WebIntentServiceData service_; |
57 | 77 |
58 // The favicon service to use. Weak pointer. | 78 // The favicon service to use. Weak pointer. |
59 FaviconService* favicon_service_; | 79 FaviconService* favicon_service_; |
60 | 80 |
61 // The URL of the page the service was originally registered from. | 81 // The URL of the page the service was originally registered from. |
62 GURL origin_url_; | 82 GURL origin_url_; |
63 | 83 |
64 DISALLOW_COPY_AND_ASSIGN(RegisterIntentHandlerInfoBarDelegate); | 84 DISALLOW_COPY_AND_ASSIGN(RegisterIntentHandlerInfoBarDelegate); |
65 }; | 85 }; |
66 | 86 |
67 #endif // CHROME_BROWSER_INTENTS_REGISTER_INTENT_HANDLER_INFOBAR_DELEGATE_H_ | 87 #endif // CHROME_BROWSER_INTENTS_REGISTER_INTENT_HANDLER_INFOBAR_DELEGATE_H_ |
OLD | NEW |