Commit d5442b46 authored by Christopher Grant's avatar Christopher Grant Committed by Commit Bot

VR: Wire up overflow menu tab control

This change enables incognito tab spawning and closing of all incognito
tabs from the new overflow menu.

BUG=817614

Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_vr;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I0d5348ad2cbf740259d8cbd77be4437d59c480c4
Reviewed-on: https://chromium-review.googlesource.com/972156
Commit-Queue: Christopher Grant <cjgrant@chromium.org>
Reviewed-by: default avatarMichael Thiessen <mthiesse@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544847}
parent 71fe557f
......@@ -81,6 +81,21 @@ public interface VrShell extends VrDialogManager {
*/
void navigateBack();
/**
* Asks VrShell to reload the current page.
*/
void reloadTab();
/**
* Asks VrShell to open a new tab.
*/
void openNewTab(boolean incognito);
/**
* Asks VrShell to close all incognito tabs.
*/
void closeAllIncognitoTabs();
/**
* Simulates a user accepting the currently visible DOFF prompt.
*/
......
......@@ -897,6 +897,7 @@ public class VrShellImpl
@VisibleForTesting
@Override
@CalledByNative
public void navigateForward() {
if (!mCanGoForward) return;
mActivity.getToolbarManager().forward();
......@@ -918,6 +919,24 @@ public class VrShellImpl
updateHistoryButtonsVisibility();
}
@Override
@CalledByNative
public void reloadTab() {
mTab.reload();
}
@Override
@CalledByNative
public void openNewTab(boolean incognito) {
mActivity.getTabCreator(incognito).launchNTP();
}
@Override
@CalledByNative
public void closeAllIncognitoTabs() {
mTabModelSelector.getModel(true).closeAllTabs();
}
private void updateHistoryButtonsVisibility() {
if (mNativeVrShell == 0) return;
if (mTab == null) {
......
......@@ -222,6 +222,32 @@ void VrGLThread::NavigateBack() {
FROM_HERE, base::BindOnce(&VrShell::NavigateBack, weak_vr_shell_));
}
void VrGLThread::NavigateForward() {
DCHECK(OnGlThread());
main_thread_task_runner_->PostTask(
FROM_HERE, base::BindOnce(&VrShell::NavigateForward, weak_vr_shell_));
}
void VrGLThread::ReloadTab() {
DCHECK(OnGlThread());
main_thread_task_runner_->PostTask(
FROM_HERE, base::BindOnce(&VrShell::ReloadTab, weak_vr_shell_));
}
void VrGLThread::OpenNewTab(bool incognito) {
DCHECK(OnGlThread());
main_thread_task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&VrShell::OpenNewTab, weak_vr_shell_, incognito));
}
void VrGLThread::CloseAllIncognitoTabs() {
DCHECK(OnGlThread());
main_thread_task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&VrShell::CloseAllIncognitoTabs, weak_vr_shell_));
}
void VrGLThread::ExitCct() {
DCHECK(OnGlThread());
main_thread_task_runner_->PostTask(
......@@ -431,6 +457,13 @@ void VrGLThread::OnAssetsUnavailable() {
weak_browser_ui_));
}
void VrGLThread::SetIncognitoTabsOpen(bool open) {
DCHECK(OnMainThread());
task_runner()->PostTask(
FROM_HERE, base::BindOnce(&BrowserUiInterface::SetIncognitoTabsOpen,
weak_browser_ui_, open));
}
void VrGLThread::ShowSoftInput(bool show) {
DCHECK(OnMainThread());
task_runner()->PostTask(FROM_HERE,
......
......@@ -81,6 +81,10 @@ class VrGLThread : public base::android::JavaHandlerThread,
void ExitFullscreen() override;
void Navigate(GURL gurl, NavigationMethod method) override;
void NavigateBack() override;
void NavigateForward() override;
void ReloadTab() override;
void OpenNewTab(bool incognito) override;
void CloseAllIncognitoTabs() override;
void ExitCct() override;
void CloseHostedDialog() override;
void OnUnsupportedMode(UiUnsupportedMode mode) override;
......@@ -115,6 +119,7 @@ class VrGLThread : public base::android::JavaHandlerThread,
std::unique_ptr<Assets> assets,
const base::Version& component_version) override;
void OnAssetsUnavailable() override;
void SetIncognitoTabsOpen(bool open) override;
void ShowSoftInput(bool show) override;
void UpdateWebInputIndices(int selection_start,
int selection_end,
......
......@@ -353,6 +353,26 @@ void VrShell::NavigateBack() {
Java_VrShellImpl_navigateBack(env, j_vr_shell_);
}
void VrShell::NavigateForward() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_VrShellImpl_navigateForward(env, j_vr_shell_);
}
void VrShell::ReloadTab() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_VrShellImpl_reloadTab(env, j_vr_shell_);
}
void VrShell::OpenNewTab(bool incognito) {
JNIEnv* env = base::android::AttachCurrentThread();
Java_VrShellImpl_openNewTab(env, j_vr_shell_, incognito);
}
void VrShell::CloseAllIncognitoTabs() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_VrShellImpl_closeAllIncognitoTabs(env, j_vr_shell_);
}
void VrShell::ExitCct() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_VrShellImpl_exitCct(env, j_vr_shell_);
......@@ -514,18 +534,15 @@ void VrShell::OnTabListCreated(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jobjectArray tabs,
jobjectArray incognito_tabs) {
ProcessTabArray(env, tabs, false);
ProcessTabArray(env, incognito_tabs, true);
ui_->FlushTabList();
}
void VrShell::ProcessTabArray(JNIEnv* env, jobjectArray tabs, bool incognito) {
size_t len = env->GetArrayLength(tabs);
incognito_tab_ids_.clear();
size_t len = env->GetArrayLength(incognito_tabs);
for (size_t i = 0; i < len; ++i) {
ScopedJavaLocalRef<jobject> j_tab(env, env->GetObjectArrayElement(tabs, i));
ScopedJavaLocalRef<jobject> j_tab(
env, env->GetObjectArrayElement(incognito_tabs, i));
TabAndroid* tab = TabAndroid::GetNativeTab(env, j_tab);
ui_->AppendToTabList(incognito, tab->GetAndroidId(), tab->GetTitle());
incognito_tab_ids_.insert(tab->GetAndroidId());
}
ui_->SetIncognitoTabsOpen(!incognito_tab_ids_.empty());
}
void VrShell::OnTabUpdated(JNIEnv* env,
......@@ -533,16 +550,16 @@ void VrShell::OnTabUpdated(JNIEnv* env,
jboolean incognito,
jint id,
jstring jtitle) {
std::string title;
base::android::ConvertJavaStringToUTF8(env, jtitle, &title);
ui_->UpdateTab(incognito, id, title);
incognito_tab_ids_.insert(id);
ui_->SetIncognitoTabsOpen(!incognito_tab_ids_.empty());
}
void VrShell::OnTabRemoved(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jboolean incognito,
jint id) {
ui_->RemoveTab(incognito, id);
incognito_tab_ids_.erase(id);
ui_->SetIncognitoTabsOpen(!incognito_tab_ids_.empty());
}
void VrShell::SetAlertDialog(JNIEnv* env,
......
......@@ -125,6 +125,10 @@ class VrShell : device::GvrGamepadDataProvider,
void OnContentPaused(bool paused);
void Navigate(GURL url, NavigationMethod method);
void NavigateBack();
void NavigateForward();
void ReloadTab();
void OpenNewTab(bool incognito);
void CloseAllIncognitoTabs();
void ExitCct();
void CloseHostedDialog();
void ToggleCardboardGamepad(bool enabled);
......@@ -237,8 +241,6 @@ class VrShell : device::GvrGamepadDataProvider,
void PostToGlThread(const base::Location& from_here, base::OnceClosure task);
void SetUiState();
void ProcessTabArray(JNIEnv* env, jobjectArray tabs, bool incognito);
void PollMediaAccessFlag();
bool HasDaydreamSupport(JNIEnv* env);
......@@ -317,6 +319,8 @@ class VrShell : device::GvrGamepadDataProvider,
base::Timer waiting_for_assets_component_timer_;
std::set<int> incognito_tab_ids_;
base::WeakPtrFactory<VrShell> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(VrShell);
......
......@@ -48,6 +48,7 @@ class BrowserUiInterface {
std::unique_ptr<Assets> assets,
const base::Version& component_version) = 0;
virtual void OnAssetsUnavailable() = 0;
virtual void SetIncognitoTabsOpen(bool open) = 0;
// Web contents text input related.
virtual void ShowSoftInput(bool show) = 0;
......@@ -55,14 +56,6 @@ class BrowserUiInterface {
int selection_end,
int composition_start,
int composition_end) = 0;
// Tab handling.
virtual void AppendToTabList(bool incognito,
int id,
const base::string16& title) {}
virtual void FlushTabList() {}
virtual void UpdateTab(bool incognito, int id, const std::string& title) {}
virtual void RemoveTab(bool incognito, int id) {}
};
} // namespace vr
......
......@@ -65,6 +65,11 @@ void Button::SetButtonColors(const ButtonColors& colors) {
OnStateUpdated();
}
void Button::SetEnabled(bool enabled) {
enabled_ = enabled;
OnStateUpdated();
}
void Button::HandleHoverEnter() {
hovered_ = enabled_;
OnStateUpdated();
......
......@@ -35,8 +35,11 @@ class Button : public UiElement {
Rect* background() const { return background_; }
UiElement* hit_plane() const { return hit_plane_; }
void SetButtonColors(const ButtonColors& colors);
void SetEnabled(bool enabled);
void set_enabled(bool enabled) { enabled_ = enabled; }
void set_click_handler(base::RepeatingCallback<void()> click_handler) {
click_handler_ = click_handler;
}
// TODO(vollick): once all elements are scaled by a ScaledDepthAdjuster, we
// will never have to change the button hover offset from the default and this
......
......@@ -25,7 +25,7 @@ TEST(Button, Hover) {
EXPECT_NE(xform.ToString(), button.hit_plane()->LocalTransform().ToString());
button.OnHoverLeave();
button.set_enabled(false);
button.SetEnabled(false);
button.OnHoverEnter(gfx::PointF(0.5f, 0.5f));
EXPECT_EQ(xform.ToString(), button.hit_plane()->LocalTransform().ToString());
button.OnHoverLeave();
......
......@@ -60,6 +60,10 @@ static const char* g_ui_element_name_strings[] = {
"kOverflowMenuBackplane",
"kOverflowMenu",
"kOverflowMenuLayout",
"kOverflowMenuFordwardButton",
"kOverflowMenuReloadButton",
"kOverflowMenuCloseAllIncognitoTabsItem",
"kOverflowMenuNewIncognitoTabItem",
"kOmniboxVisibiltyControlForVoice",
"kOmniboxVisibilityControlForAudioPermissionPrompt",
"kOmniboxDmmRoot",
......
......@@ -59,6 +59,10 @@ enum UiElementName {
kOverflowMenuBackplane,
kOverflowMenu,
kOverflowMenuLayout,
kOverflowMenuFordwardButton,
kOverflowMenuReloadButton,
kOverflowMenuCloseAllIncognitoTabsItem,
kOverflowMenuNewIncognitoTabItem,
kOmniboxVisibiltyControlForVoice,
kOmniboxVisibilityControlForAudioPermissionPrompt,
kOmniboxDmmRoot,
......
......@@ -33,6 +33,7 @@ struct Model {
bool incognito = false;
bool in_cct = false;
bool can_navigate_back = false;
bool can_navigate_forward = false;
ToolbarState toolbar_state;
std::vector<OmniboxSuggestion> omnibox_suggestions;
SpeechRecognitionModel speech;
......@@ -50,6 +51,7 @@ struct Model {
bool supports_selection = true;
bool needs_keyboard_update = false;
bool overflow_menu_enabled = false;
bool incognito_tabs_open = false;
// WebVR state.
WebVrModel web_vr;
......
......@@ -42,6 +42,7 @@ class MockBrowserUiInterface : public BrowserUiInterface {
std::unique_ptr<Assets> assets,
const base::Version& component_version) {}
MOCK_METHOD0(OnAssetsUnavailable, void());
MOCK_METHOD1(SetIncognitoTabsOpen, void(bool));
MOCK_METHOD1(ShowSoftInput, void(bool));
MOCK_METHOD4(UpdateWebInputIndices, void(int, int, int, int));
......
......@@ -20,6 +20,10 @@ class MockUiBrowserInterface : public UiBrowserInterface {
MOCK_METHOD0(ExitFullscreen, void());
MOCK_METHOD2(Navigate, void(GURL gurl, NavigationMethod method));
MOCK_METHOD0(NavigateBack, void());
MOCK_METHOD0(NavigateForward, void());
MOCK_METHOD0(ReloadTab, void());
MOCK_METHOD1(OpenNewTab, void(bool));
MOCK_METHOD0(CloseAllIncognitoTabs, void());
MOCK_METHOD0(ExitCct, void());
MOCK_METHOD0(CloseHostedDialog, void());
MOCK_METHOD1(OnUnsupportedMode, void(UiUnsupportedMode mode));
......
......@@ -52,7 +52,7 @@ constexpr float kDefaultViewScaleFactor = 1.2f;
constexpr float kMinViewScaleFactor = 0.5f;
constexpr float kMaxViewScaleFactor = 5.0f;
constexpr float kViewScaleAdjustmentFactor = 0.2f;
constexpr float kPageLoadTimeMilliseconds = 500;
constexpr float kPageLoadTimeMilliseconds = 1000;
constexpr gfx::Point3F kDefaultLaserOrigin = {0.5f, -0.5f, 0.f};
constexpr gfx::Vector3dF kLaserLocalOffset = {0.f, -0.0075f, -0.05f};
......@@ -468,6 +468,31 @@ void VrTestContext::Navigate(GURL gurl, NavigationMethod method) {
void VrTestContext::NavigateBack() {
page_load_start_ = base::TimeTicks::Now();
model_->can_navigate_back = false;
model_->can_navigate_forward = true;
}
void VrTestContext::NavigateForward() {
page_load_start_ = base::TimeTicks::Now();
model_->can_navigate_back = true;
model_->can_navigate_forward = false;
}
void VrTestContext::ReloadTab() {
page_load_start_ = base::TimeTicks::Now();
}
void VrTestContext::OpenNewTab(bool incognito) {
DCHECK(incognito);
incognito_ = true;
ui_->SetIncognito(true);
model_->incognito_tabs_open = true;
}
void VrTestContext::CloseAllIncognitoTabs() {
incognito_ = true;
ui_->SetIncognito(false);
model_->incognito_tabs_open = false;
}
void VrTestContext::ExitCct() {}
......
......@@ -44,6 +44,10 @@ class VrTestContext : public vr::UiBrowserInterface {
void ExitPresent() override;
void ExitFullscreen() override;
void NavigateBack() override;
void NavigateForward() override;
void ReloadTab() override;
void OpenNewTab(bool incognito) override;
void CloseAllIncognitoTabs() override;
void ExitCct() override;
void CloseHostedDialog() override;
void OnUnsupportedMode(vr::UiUnsupportedMode mode) override;
......
......@@ -123,8 +123,8 @@ void Ui::SetIsExiting() {
}
void Ui::SetHistoryButtonsEnabled(bool can_go_back, bool can_go_forward) {
// We don't yet support forward navigation so we ignore this parameter.
model_->can_navigate_back = can_go_back;
model_->can_navigate_forward = can_go_forward;
}
void Ui::SetVideoCaptureEnabled(bool enabled) {
......@@ -435,6 +435,10 @@ void Ui::OnAssetsUnavailable() {
model_->waiting_for_background = false;
}
void Ui::SetIncognitoTabsOpen(bool open) {
model_->incognito_tabs_open = open;
}
void Ui::ReinitializeForTest(const UiInitialState& ui_initial_state) {
InitializeModel(ui_initial_state);
}
......
......@@ -100,6 +100,7 @@ class Ui : public BrowserUiInterface, public KeyboardUiInterface {
std::unique_ptr<Assets> assets,
const base::Version& component_version) override;
void OnAssetsUnavailable() override;
void SetIncognitoTabsOpen(bool open) override;
// TODO(ymalik): We expose this to stop sending VSync to the WebVR page until
// the splash screen has been visible for its minimum duration. The visibility
......
......@@ -30,6 +30,10 @@ class UiBrowserInterface {
virtual void ExitFullscreen() = 0;
virtual void Navigate(GURL gurl, NavigationMethod method) = 0;
virtual void NavigateBack() = 0;
virtual void NavigateForward() = 0;
virtual void ReloadTab() = 0;
virtual void OpenNewTab(bool incognito) = 0;
virtual void CloseAllIncognitoTabs() = 0;
virtual void ExitCct() = 0;
virtual void CloseHostedDialog() = 0;
virtual void OnUnsupportedMode(UiUnsupportedMode mode) = 0;
......
This diff is collapsed.
......@@ -44,7 +44,6 @@ class UiSceneCreator {
void CreateViewportAwareRoot();
void CreateUrlBar();
void CreateOverflowMenu();
void CreateLoadingIndicator();
void CreateSnackbars();
void CreateOmnibox();
void CreateCloseButton();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment