settings_api_bubble_helper_views.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright (c) 2014 The Chromium Authors. All rights reserved.
2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file.
4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/views/settings_api_bubble_helper_views.h"
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/extensions/settings_api_bubble_controller.h"
8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/extensions/settings_api_helpers.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/browser_finder.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/views/extensions/extension_message_bubble_view.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/views/frame/browser_view.h"
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/views/settings_api_bubble_helper_views.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/views/toolbar/home_button.h"
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/common/extensions/manifest_handlers/settings_overrides_handler.h"
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace {
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ShowSettingsApiBubble(extensions::SettingsApiOverrideType type,
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           const std::string& extension_id,
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           Profile* profile,
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           views::View* anchor_view,
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           views::BubbleBorder::Arrow arrow) {
24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  scoped_ptr<extensions::SettingsApiBubbleController> settings_api_bubble(
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      new extensions::SettingsApiBubbleController(profile, type));
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!settings_api_bubble->ShouldShow(extension_id))
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return;
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  extensions::SettingsApiBubbleController* controller =
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      settings_api_bubble.get();
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  extensions::ExtensionMessageBubbleView* bubble_delegate =
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      new extensions::ExtensionMessageBubbleView(
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          anchor_view,
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          arrow,
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          settings_api_bubble.PassAs<
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch              extensions::ExtensionMessageBubbleController>());
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::BubbleDelegateView::CreateBubble(bubble_delegate);
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  controller->Show(bubble_delegate);
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace extensions {
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid MaybeShowExtensionControlledHomeNotification(Browser* browser) {
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if !defined(OS_WIN)
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return;
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const Extension* extension = OverridesHomepage(browser->profile(), NULL);
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (extension) {
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    // The bubble will try to anchor itself against the home button
53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    views::View* anchor_view = BrowserView::GetBrowserViewForBrowser(browser)->
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        toolbar()->home_button();
55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowSettingsApiBubble(BUBBLE_TYPE_HOME_PAGE,
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                          extension->id(),
57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                          browser->profile(),
58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                          anchor_view,
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                          views::BubbleBorder::TOP_LEFT);
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid MaybeShowExtensionControlledSearchNotification(
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    Profile* profile,
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    content::WebContents* web_contents,
66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    const AutocompleteMatch& match) {
67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if !defined(OS_WIN)
68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return;
69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (match.provider &&
72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      match.provider->type() == AutocompleteProvider::TYPE_SEARCH) {
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    const extensions::Extension* extension =
74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        OverridesSearchEngine(profile, NULL);
75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    if (extension) {
76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ToolbarView* toolbar =
77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          BrowserView::GetBrowserViewForBrowser(
78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch              chrome::FindBrowserWithWebContents(web_contents))->toolbar();
79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ShowSettingsApiBubble(BUBBLE_TYPE_SEARCH_ENGINE,
80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            extension->id(),
81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            profile,
82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            toolbar->app_menu(),
83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            views::BubbleBorder::TOP_RIGHT);
84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace extensions
89