blob: a28caced8efcf8d58b3d017702bc5bcd6834d20d [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <memory>
#include "chrome/browser/permissions/permission_request_manager_test_api.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands_mac.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
#include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
#include "chrome/browser/ui/exclusive_access/fullscreen_controller_test.h"
#include "chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/views/permission_bubble/permission_prompt_impl.h"
#import "testing/gtest_mac.h"
#include "ui/base/test/scoped_fake_nswindow_fullscreen.h"
// This file now tests the views permission bubble, on a Cocoa browser window.
namespace {
// Shows a test bubble using the permission request manager rather than any
// toolkit-specific bubble implementation.
void ShowBubble(Browser* browser) {
auto test_api =
std::make_unique<test::PermissionRequestManagerTestApi>(browser);
EXPECT_TRUE(test_api->manager());
test_api->AddSimpleRequest(CONTENT_SETTINGS_TYPE_GEOLOCATION);
// The PermissionRequestManager displays prompts asynchronously.
EXPECT_FALSE(test_api->GetPromptWindow());
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(test_api->GetPromptWindow());
}
bool HasVisibleLocationBarForBrowser(Browser* browser) {
return browser->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR);
}
} // namespace
IN_PROC_BROWSER_TEST_F(PermissionBubbleBrowserTest, HasLocationBarByDefault) {
ShowBubble(browser());
HasVisibleLocationBarForBrowser(browser());
}
IN_PROC_BROWSER_TEST_F(PermissionBubbleBrowserTest,
TabFullscreenHasLocationBar) {
FullscreenNotificationObserver fullscreen_observer;
ShowBubble(browser());
EXPECT_TRUE(HasVisibleLocationBarForBrowser(browser()));
FullscreenController* controller =
browser()->exclusive_access_manager()->fullscreen_controller();
controller->EnterFullscreenModeForTab(
browser()->tab_strip_model()->GetActiveWebContents(), GURL());
fullscreen_observer.Wait();
EXPECT_FALSE(HasVisibleLocationBarForBrowser(browser()));
controller->ExitFullscreenModeForTab(
browser()->tab_strip_model()->GetActiveWebContents());
fullscreen_observer.Wait();
EXPECT_TRUE(HasVisibleLocationBarForBrowser(browser()));
}
IN_PROC_BROWSER_TEST_F(PermissionBubbleBrowserTest, AppHasNoLocationBar) {
Browser* app_browser = OpenExtensionAppWindow();
// ShowBubble(app_browser) doesn't actually show a bubble for extension app
// windows, so create one directly.
auto prompt =
std::make_unique<PermissionPromptImpl>(app_browser, test_delegate());
EXPECT_FALSE(HasVisibleLocationBarForBrowser(app_browser));
}
// Crashes. http://crbug.com/920582
IN_PROC_BROWSER_TEST_F(PermissionBubbleKioskBrowserTest,
DISABLED_KioskHasNoLocationBar) {
ShowBubble(browser());
// Kiosk mode on Mac has no location bar.
EXPECT_FALSE(HasVisibleLocationBarForBrowser(browser()));
}