// Copyright (c) 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_INSTANT_INSTANT_CONTROLLER_DELEGATE_H_
#define CHROME_BROWSER_INSTANT_INSTANT_CONTROLLER_DELEGATE_H_

#include "base/string16.h"
#include "chrome/common/instant_types.h"

class TabContents;

namespace gfx {
class Rect;
}

// InstantController calls these methods on its delegate (Browser, via
// BrowserInstantController) to ask for the Instant preview to be shown,
// hidden, etc. In the following methods, if a TabContents argument is
// explicitly supplied, the delegate MUST use it. Otherwise, the preview
// TabContents can be gotten by calling InstantController::GetPreviewContents()
// (note that it may return NULL).
class InstantControllerDelegate {
 public:
  // Show the preview with the given |height|.
  virtual void ShowInstant(int height, InstantSizeUnits units) = 0;

  // Hide any preview currently being shown.
  virtual void HideInstant() = 0;

  // Commit the |preview| by merging it into the active tab or adding it as a
  // new tab, based on |in_new_tab|. Delegate takes ownership of |preview|.
  virtual void CommitInstant(TabContents* preview, bool in_new_tab) = 0;

  // Autocomplete the Instant suggested |text| into the omnibox, using the
  // specified |behavior| (see instant_types.h for details).
  virtual void SetSuggestedText(const string16& text,
                                InstantCompleteBehavior behavior) = 0;

  // Return the bounds that the preview is placed at, in screen coordinates.
  virtual gfx::Rect GetInstantBounds() = 0;

  // Notification that the preview gained focus, usually due to the user
  // clicking on it.
  virtual void InstantPreviewFocused() = 0;

  // Return the currently active tab, over which any preview would be shown.
  virtual TabContents* GetActiveTabContents() const = 0;

 protected:
  virtual ~InstantControllerDelegate() {}
};

#endif  // CHROME_BROWSER_INSTANT_INSTANT_CONTROLLER_DELEGATE_H_