| Index: chrome/browser/ui/views/frame/instant_overlay_controller_views.cc
|
| diff --git a/chrome/browser/ui/views/frame/instant_overlay_controller_views.cc b/chrome/browser/ui/views/frame/instant_overlay_controller_views.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f3b3c0052234a4a4124e7fe9fbe35282a537098e
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/views/frame/instant_overlay_controller_views.cc
|
| @@ -0,0 +1,59 @@
|
| +// 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.
|
| +
|
| +#include "chrome/browser/ui/views/frame/instant_overlay_controller_views.h"
|
| +
|
| +#include "chrome/browser/instant/instant_model.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/ui/browser.h"
|
| +#include "chrome/browser/ui/view_ids.h"
|
| +#include "chrome/browser/ui/views/frame/browser_view.h"
|
| +#include "chrome/browser/ui/views/frame/contents_container.h"
|
| +#include "chrome/browser/ui/views/infobars/infobar_container_view.h"
|
| +#include "ui/views/controls/webview/webview.h"
|
| +
|
| +InstantOverlayControllerViews::InstantOverlayControllerViews(
|
| + Browser* browser,
|
| + ContentsContainer* contents)
|
| + : InstantOverlayController(browser),
|
| + contents_(contents) {
|
| +}
|
| +
|
| +InstantOverlayControllerViews::~InstantOverlayControllerViews() {
|
| +}
|
| +
|
| +void InstantOverlayControllerViews::OverlayStateChanged(
|
| + const InstantModel& model) {
|
| + if (model.overlay()) {
|
| + // Show the overlay.
|
| + if (!overlay_) {
|
| + overlay_.reset(new views::WebView(browser_->profile()));
|
| + overlay_->set_id(VIEW_ID_TAB_CONTAINER);
|
| + }
|
| + // Drop shadow is only needed if the overlay does not fill up the entire
|
| + // contents page.
|
| + bool draw_drop_shadow = !contents_->IsOverlayFullHeight(
|
| + model.height(), model.is_height_in_pixels());
|
| + contents_->SetOverlay(overlay_.get(), model.overlay(), model.height(),
|
| + model.is_height_in_pixels(), draw_drop_shadow);
|
| + overlay_->SetWebContents(model.overlay());
|
| + browser_->MaybeUpdateBookmarkBarStateForInstantOverlay();
|
| + } else if (overlay_) {
|
| + // Hide the overlay. SetWebContents() must happen before SetOverlay().
|
| + overlay_->SetWebContents(NULL);
|
| + contents_->SetOverlay(NULL, NULL, 0, false, false);
|
| + overlay_.reset();
|
| + }
|
| +
|
| + // If an Instant overlay is added during an immersive mode reveal, the reveal
|
| + // view needs to stay on top.
|
| + // Notify infobar container of change in overlay state.
|
| + if (overlay_) {
|
| + BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_);
|
| + if (browser_view) {
|
| + browser_view->MaybeStackImmersiveRevealAtTop();
|
| + browser_view->infobar_container()->OverlayStateChanged(model);
|
| + }
|
| + }
|
| +}
|
|
|