// Copyright 2012 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. #ifndef CHROME_BROWSER_UI_SEARCH_INSTANT_OVERLAY_MODEL_H_ #define CHROME_BROWSER_UI_SEARCH_INSTANT_OVERLAY_MODEL_H_ #include "base/basictypes.h" #include "base/observer_list.h" #include "chrome/common/instant_types.h" #include "chrome/common/search_types.h" class InstantController; class InstantOverlayModelObserver; namespace content { class WebContents; } // Holds state that is important to any views concerned with visibility and // layout of the Instant overlay. class InstantOverlayModel { public: explicit InstantOverlayModel(InstantController* controller); ~InstantOverlayModel(); // InstantOverlayModel only uses Mode::mode internally. Other parts of Mode, // such as Mode::origin, may have arbitrary values, and should be ignored. const SearchMode& mode() const { return mode_; } int height() const { return height_; } InstantSizeUnits height_units() const { return height_units_; } void SetOverlayState(const SearchMode& mode, int height, InstantSizeUnits height_units); void SetOverlayContents(content::WebContents* overlay_contents); content::WebContents* GetOverlayContents() const; // Add and remove observers. void AddObserver(InstantOverlayModelObserver* observer); void RemoveObserver(InstantOverlayModelObserver* observer); private: SearchMode mode_; int height_; InstantSizeUnits height_units_; // Weak. Remembers the last set overlay contents to detect changes. Actual // overlay contents is fetched from the |controller_| as this may not always // reflect the actual overlay in effect. content::WebContents* overlay_contents_; // Weak. The controller currently holds some model state. // TODO(dhollowa): Remove this, transfer all state to InstantOverlayModel. InstantController* const controller_; // Observers. ObserverList<InstantOverlayModelObserver> observers_; DISALLOW_COPY_AND_ASSIGN(InstantOverlayModel); }; #endif // CHROME_BROWSER_UI_SEARCH_INSTANT_OVERLAY_MODEL_H_