1// Copyright (c) 2012 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/extensions/browser_extension_window_controller.h" 6 7#include "chrome/browser/extensions/api/tabs/tabs_constants.h" 8#include "chrome/browser/extensions/extension_tab_util.h" 9#include "chrome/browser/extensions/window_controller_list.h" 10#include "chrome/browser/profiles/profile.h" 11#include "chrome/browser/ui/browser.h" 12#include "chrome/browser/ui/browser_window.h" 13#include "chrome/browser/ui/tabs/tab_strip_model.h" 14#include "components/sessions/session_id.h" 15#include "extensions/common/extension.h" 16 17BrowserExtensionWindowController::BrowserExtensionWindowController( 18 Browser* browser) 19 : extensions::WindowController(browser->window(), browser->profile()), 20 browser_(browser) { 21 extensions::WindowControllerList::GetInstance()->AddExtensionWindow(this); 22} 23 24BrowserExtensionWindowController::~BrowserExtensionWindowController() { 25 extensions::WindowControllerList::GetInstance()->RemoveExtensionWindow(this); 26} 27 28int BrowserExtensionWindowController::GetWindowId() const { 29 return static_cast<int>(browser_->session_id().id()); 30} 31 32namespace keys = extensions::tabs_constants; 33 34std::string BrowserExtensionWindowController::GetWindowTypeText() const { 35 if (browser_->is_type_popup()) 36 return keys::kWindowTypeValuePopup; 37 if (browser_->is_app()) 38 return keys::kWindowTypeValueApp; 39 return keys::kWindowTypeValueNormal; 40} 41 42base::DictionaryValue* 43BrowserExtensionWindowController::CreateWindowValue() const { 44 base::DictionaryValue* result = 45 extensions::WindowController::CreateWindowValue(); 46 return result; 47} 48 49base::DictionaryValue* 50BrowserExtensionWindowController::CreateWindowValueWithTabs( 51 const extensions::Extension* extension) const { 52 base::DictionaryValue* result = CreateWindowValue(); 53 54 result->Set(keys::kTabsKey, 55 extensions::ExtensionTabUtil::CreateTabList(browser_, extension)); 56 57 return result; 58} 59 60base::DictionaryValue* BrowserExtensionWindowController::CreateTabValue( 61 const extensions::Extension* extension, int tab_index) const { 62 TabStripModel* tab_strip = browser_->tab_strip_model(); 63 base::DictionaryValue* result = extensions::ExtensionTabUtil::CreateTabValue( 64 tab_strip->GetWebContentsAt(tab_index), tab_strip, tab_index); 65 return result; 66} 67 68bool BrowserExtensionWindowController::CanClose(Reason* reason) const { 69 // Don't let an extension remove the window if the user is dragging tabs 70 // in that window. 71 if (!browser_->window()->IsTabStripEditable()) { 72 *reason = extensions::WindowController::REASON_NOT_EDITABLE; 73 return false; 74 } 75 return true; 76} 77 78void BrowserExtensionWindowController::SetFullscreenMode( 79 bool is_fullscreen, 80 const GURL& extension_url) const { 81 if (browser_->window()->IsFullscreen() != is_fullscreen) 82 browser_->ToggleFullscreenModeWithExtension(extension_url); 83} 84 85Browser* BrowserExtensionWindowController::GetBrowser() const { 86 return browser_; 87} 88 89bool BrowserExtensionWindowController::IsVisibleToExtension( 90 const extensions::Extension* extension) const { 91 // Platform apps can only see their own windows. 92 return !extension->is_platform_app(); 93} 94