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