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.
5 #include "chrome/browser/ui/views/settings_api_bubble_helper_views.h"
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"
19 void ShowSettingsApiBubble(extensions::SettingsApiOverrideType type,
20 const std::string& extension_id,
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))
29 extensions::SettingsApiBubbleController* controller =
30 settings_api_bubble.get();
31 extensions::ExtensionMessageBubbleView* bubble_delegate =
32 new extensions::ExtensionMessageBubbleView(
35 settings_api_bubble.PassAs<
36 extensions::ExtensionMessageBubbleController>());
37 views::BubbleDelegateView::CreateBubble(bubble_delegate);
38 controller->Show(bubble_delegate);
43 namespace extensions {
45 void MaybeShowExtensionControlledHomeNotification(Browser* browser) {
50 const Extension* extension = OverridesHomepage(browser->profile(), NULL);
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,
59 views::BubbleBorder::TOP_LEFT);
63 void MaybeShowExtensionControlledSearchNotification(
65 content::WebContents* web_contents,
66 const AutocompleteMatch& match) {
72 match.provider->type() == AutocompleteProvider::TYPE_SEARCH) {
73 const extensions::Extension* extension =
74 OverridesSearchEngine(profile, NULL);
76 ToolbarView* toolbar =
77 BrowserView::GetBrowserViewForBrowser(
78 chrome::FindBrowserWithWebContents(web_contents))->toolbar();
79 ShowSettingsApiBubble(BUBBLE_TYPE_SEARCH_ENGINE,
83 views::BubbleBorder::TOP_RIGHT);
88 } // namespace extensions