Chromium Code Reviews| Index: chrome/browser/ui/search/search_model.cc |
| diff --git a/chrome/browser/ui/search/search_model.cc b/chrome/browser/ui/search/search_model.cc |
| index 74232f32e8579f2b0181d03a1ee4b441c8b47d4c..1c1d63f719289c9a6f82c5a5f928658c63613b9e 100644 |
| --- a/chrome/browser/ui/search/search_model.cc |
| +++ b/chrome/browser/ui/search/search_model.cc |
| @@ -16,19 +16,55 @@ SearchModel::SearchModel() { |
| SearchModel::~SearchModel() { |
| } |
| +void SearchModel::SetState(const State& new_state) { |
| + DCHECK(IsInstantExtendedAPIEnabled()) |
| + << "Please do not try to set the SearchModel mode without first " |
| + << "checking if Search is enabled."; |
| + |
| + if (state_ == new_state) |
| + return; |
| + |
| + const State old_state = state_; |
| + state_ = new_state; |
| + |
| + FOR_EACH_OBSERVER(SearchModelObserver, observers_, |
| + ModelChanged(old_state, state_)); |
| +} |
| + |
| void SearchModel::SetMode(const Mode& new_mode) { |
| DCHECK(IsInstantExtendedAPIEnabled()) |
| << "Please do not try to set the SearchModel mode without first " |
| << "checking if Search is enabled."; |
| - if (mode_ == new_mode) |
| + if (state_.mode == new_mode) |
| return; |
| - const Mode old_mode = mode_; |
| - mode_ = new_mode; |
| + const State old_state = state_; |
| + state_.mode = new_mode; |
| + |
| + // For |SEARCH_SUGGESTIONS| and |SEARCH_RESULTS| modes, SearchBox API will |
| + // determine visibility of top bars via SetTopBarsVisible(); for other modes, |
| + // top bars are always visible, if available. |
| + if (!state_.mode.is_search()) |
| + state_.top_bars_visible = true; |
| FOR_EACH_OBSERVER(SearchModelObserver, observers_, |
| - ModeChanged(old_mode, mode_)); |
| + ModelChanged(old_state, state_)); |
| +} |
| + |
| +void SearchModel::SetTopBarsVisible(bool visible) { |
| + DCHECK(IsInstantExtendedAPIEnabled()) |
| + << "Please do not try to set the SearchModel mode without first " |
| + << "checking if Search is enabled."; |
| + |
| + if (state_.top_bars_visible == visible) |
| + return; |
| + |
| + const State old_state = state_; |
| + state_.top_bars_visible = visible; |
| + |
| + FOR_EACH_OBSERVER(SearchModelObserver, observers_, |
| + ModelChanged(old_state, state_)); |
| } |
| void SearchModel::AddObserver(SearchModelObserver* observer) { |
| @@ -39,5 +75,18 @@ void SearchModel::RemoveObserver(SearchModelObserver* observer) { |
| observers_.RemoveObserver(observer); |
| } |
| +// static. |
| +bool SearchModel::ShouldChangeTopBarsVisibility(const State& old_state, |
|
dhollowa
2013/03/14 00:30:58
Public static methods go to top of class.
kuan
2013/03/14 00:44:18
Done.
|
| + const State& new_state) { |
| + // If mode has changed, only change top bars visibility if new mode is not |
| + // |SEARCH_SUGGESTIONS| or |SEARCH_RESULTS|. Top bars visibility for |
| + // these 2 modes is determined when the mode stays the same, and: |
| + // - for |NTP/SERP| pages: by SearchBox API, or |
| + // - for |DEFAULT| pages: by platform-specific implementation of |
| + // |InstantOverlayController| when it shows/hides the Instant overlay. |
| + return old_state.mode != new_state.mode ? |
| + !new_state.mode.is_search() : new_state.mode.is_search(); |
| +} |
| + |
| } // namespace search |
| } // namespace chrome |