1 // Copyright 2017 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/vr/model/model.h" 6 7 namespace vr { 8 9 namespace { 10 IsOpaqueUiMode(UiMode mode)11bool IsOpaqueUiMode(UiMode mode) { 12 switch (mode) { 13 case kModeBrowsing: 14 case kModeFullscreen: 15 case kModeWebVr: 16 case kModeVoiceSearch: 17 case kModeEditingOmnibox: 18 return true; 19 case kModeRepositionWindow: 20 case kModeModalPrompt: 21 case kModeVoiceSearchListening: 22 return false; 23 } 24 NOTREACHED(); 25 return true; 26 } 27 28 } // namespace 29 30 Model::Model() = default; 31 Model::~Model() = default; 32 color_scheme() const33const ColorScheme& Model::color_scheme() const { 34 ColorScheme::Mode mode = ColorScheme::kModeNormal; 35 if (incognito) 36 mode = ColorScheme::kModeIncognito; 37 if (fullscreen_enabled()) 38 mode = ColorScheme::kModeFullscreen; 39 return ColorScheme::GetColorScheme(mode); 40 } 41 push_mode(UiMode mode)42void Model::push_mode(UiMode mode) { 43 if (!ui_modes.empty() && ui_modes.back() == mode) 44 return; 45 ui_modes.push_back(mode); 46 } 47 pop_mode()48void Model::pop_mode() { 49 pop_mode(ui_modes.back()); 50 } 51 pop_mode(UiMode mode)52void Model::pop_mode(UiMode mode) { 53 if (ui_modes.empty() || ui_modes.back() != mode) 54 return; 55 // We should always have a mode to be in when we're clearing a mode. 56 DCHECK_GE(ui_modes.size(), 2u); 57 ui_modes.pop_back(); 58 } 59 toggle_mode(UiMode mode)60void Model::toggle_mode(UiMode mode) { 61 if (!ui_modes.empty() && ui_modes.back() == mode) { 62 pop_mode(mode); 63 return; 64 } 65 push_mode(mode); 66 } 67 get_mode() const68UiMode Model::get_mode() const { 69 return ui_modes.back(); 70 } 71 get_last_opaque_mode() const72UiMode Model::get_last_opaque_mode() const { 73 for (auto iter = ui_modes.rbegin(); iter != ui_modes.rend(); ++iter) { 74 if (IsOpaqueUiMode(*iter)) 75 return *iter; 76 } 77 DCHECK(false) << "get_last_opaque_mode should only be called with at least " 78 "one opaque mode."; 79 return kModeBrowsing; 80 } 81 has_mode_in_stack(UiMode mode) const82bool Model::has_mode_in_stack(UiMode mode) const { 83 for (auto stacked_mode : ui_modes) { 84 if (mode == stacked_mode) 85 return true; 86 } 87 return false; 88 } 89 browsing_enabled() const90bool Model::browsing_enabled() const { 91 return !web_vr_enabled(); 92 } 93 default_browsing_enabled() const94bool Model::default_browsing_enabled() const { 95 return get_last_opaque_mode() == kModeBrowsing; 96 } 97 voice_search_available() const98bool Model::voice_search_available() const { 99 return speech.has_or_can_request_record_audio_permission && !incognito && 100 !active_capturing.audio_capture_enabled; 101 } 102 voice_search_active() const103bool Model::voice_search_active() const { 104 return get_last_opaque_mode() == kModeVoiceSearch; 105 } 106 omnibox_editing_enabled() const107bool Model::omnibox_editing_enabled() const { 108 return get_last_opaque_mode() == kModeEditingOmnibox; 109 } 110 editing_enabled() const111bool Model::editing_enabled() const { 112 return editing_input || editing_web_input; 113 } 114 fullscreen_enabled() const115bool Model::fullscreen_enabled() const { 116 return get_last_opaque_mode() == kModeFullscreen; 117 } 118 web_vr_enabled() const119bool Model::web_vr_enabled() const { 120 return get_last_opaque_mode() == kModeWebVr; 121 } 122 reposition_window_enabled() const123bool Model::reposition_window_enabled() const { 124 return ui_modes.back() == kModeRepositionWindow; 125 } 126 reposition_window_permitted() const127bool Model::reposition_window_permitted() const { 128 return !editing_input && !editing_web_input && 129 active_modal_prompt_type == kModalPromptTypeNone && 130 !hosted_platform_ui.hosted_ui_enabled; 131 } 132 primary_controller() const133const ControllerModel& Model::primary_controller() const { 134 return controllers[0]; 135 } 136 mutable_primary_controller()137ControllerModel& Model::mutable_primary_controller() { 138 return controllers[0]; 139 } 140 set_omnibox_text_field_info(EditedText text)141void Model::set_omnibox_text_field_info(EditedText text) { 142 omnibox_text_field_info = std::move(text); 143 omnibox_text_field_touched = current_time; 144 } 145 set_web_input_text_field_info(EditedText text)146void Model::set_web_input_text_field_info(EditedText text) { 147 web_input_text_field_info = std::move(text); 148 web_input_text_field_touched = current_time; 149 } 150 151 } // namespace vr 152