Upstream version 7.35.139.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / settings_api_bubble_helper_views.cc
1 // Copyright (c) 2014 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 #include "chrome/browser/ui/views/settings_api_bubble_helper_views.h"
6
7 #include "chrome/browser/extensions/settings_api_bubble_controller.h"
8 #include "chrome/browser/extensions/settings_api_helpers.h"
9 #include "chrome/browser/ui/browser_finder.h"
10 #include "chrome/browser/ui/views/extensions/extension_message_bubble_view.h"
11 #include "chrome/browser/ui/views/frame/browser_view.h"
12 #include "chrome/browser/ui/views/settings_api_bubble_helper_views.h"
13 #include "chrome/browser/ui/views/toolbar/home_button.h"
14 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
15 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler.h"
16
17 namespace {
18
19 void ShowSettingsApiBubble(extensions::SettingsApiOverrideType type,
20                            const std::string& extension_id,
21                            Profile* profile,
22                            views::View* anchor_view,
23                            views::BubbleBorder::Arrow arrow) {
24   scoped_ptr<extensions::SettingsApiBubbleController> settings_api_bubble(
25       new extensions::SettingsApiBubbleController(profile, type));
26   if (!settings_api_bubble->ShouldShow(extension_id))
27     return;
28
29   extensions::SettingsApiBubbleController* controller =
30       settings_api_bubble.get();
31   extensions::ExtensionMessageBubbleView* bubble_delegate =
32       new extensions::ExtensionMessageBubbleView(
33           anchor_view,
34           arrow,
35           settings_api_bubble.PassAs<
36               extensions::ExtensionMessageBubbleController>());
37   views::BubbleDelegateView::CreateBubble(bubble_delegate);
38   controller->Show(bubble_delegate);
39 }
40
41 }  // namespace
42
43 namespace extensions {
44
45 void MaybeShowExtensionControlledHomeNotification(Browser* browser) {
46 #if !defined(OS_WIN)
47   return;
48 #endif
49
50   const Extension* extension = OverridesHomepage(browser->profile(), NULL);
51   if (extension) {
52     // The bubble will try to anchor itself against the home button
53     views::View* anchor_view = BrowserView::GetBrowserViewForBrowser(browser)->
54         toolbar()->home_button();
55     ShowSettingsApiBubble(BUBBLE_TYPE_HOME_PAGE,
56                           extension->id(),
57                           browser->profile(),
58                           anchor_view,
59                           views::BubbleBorder::TOP_LEFT);
60   }
61 }
62
63 void MaybeShowExtensionControlledSearchNotification(
64     Profile* profile,
65     content::WebContents* web_contents,
66     const AutocompleteMatch& match) {
67 #if !defined(OS_WIN)
68   return;
69 #endif
70
71   if (match.provider &&
72       match.provider->type() == AutocompleteProvider::TYPE_SEARCH) {
73     const extensions::Extension* extension =
74         OverridesSearchEngine(profile, NULL);
75     if (extension) {
76       ToolbarView* toolbar =
77           BrowserView::GetBrowserViewForBrowser(
78               chrome::FindBrowserWithWebContents(web_contents))->toolbar();
79       ShowSettingsApiBubble(BUBBLE_TYPE_SEARCH_ENGINE,
80                             extension->id(),
81                             profile,
82                             toolbar->app_menu(),
83                             views::BubbleBorder::TOP_RIGHT);
84     }
85   }
86 }
87
88 }  // namespace extensions