// Copyright 2014 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 COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_DRIVER_H_
#define COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_DRIVER_H_

#include <string>

class GURL;

namespace translate {

// Interface that allows Translate core code to interact with its driver (i.e.,
// obtain information from it and give information to it). A concrete
// implementation must be provided by the driver.
class TranslateDriver {
 public:
  // Returns true if the current page was navigated through a link.
  virtual bool IsLinkNavigation() = 0;

  // Called when Translate is enabled or disabled.
  virtual void OnTranslateEnabledChanged() = 0;

  // Called when the page is "translated" state of the page changed.
  virtual void OnIsPageTranslatedChanged() = 0;

  // Translates the page contents from |source_lang| to |target_lang|.
  virtual void TranslatePage(int page_seq_no,
                             const std::string& translate_script,
                             const std::string& source_lang,
                             const std::string& target_lang) = 0;

  // Reverts the contents of the page to its original language.
  virtual void RevertTranslation(int page_seq_no) = 0;

  // Returns whether the user is currently operating in off-the-record mode.
  virtual bool IsOffTheRecord() = 0;

  // Returns the mime type of the current page.
  virtual const std::string& GetContentsMimeType() = 0;

  // Returns the last committed URL, or an empty GURL if there is no committed
  // URL.
  virtual const GURL& GetLastCommittedURL() = 0;

  // Returns the visible URL, or an empty GURL if there is no visible URL.
  virtual const GURL& GetVisibleURL() = 0;

  // Returns whether the driver has access to the current page.
  virtual bool HasCurrentPage() = 0;

  // Opens |url| in a new tab.
  virtual void OpenUrlInNewTab(const GURL& url) = 0;
};

}  // namespace translate

#endif  // COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_DRIVER_H_
