// Copyright 2016 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.

module ash.mojom;

// For GURL.
import "url/mojom/url.mojom";

// An exported object in ash which lets an ash consumer set a client interface.
interface NewWindowController {
  SetClient(associated NewWindowClient client);
};

// A delegate interface that an ash user sends to ash to handle certain window
// management responsibilities.
interface NewWindowClient {
  // Invoked when the user uses Ctrl+T to open a new tab.
  NewTab();

  // Opens a new tab with the specified URL. If the |from_user_interaction|
  // is true then the page will load with a user activation. This means the
  // page will be able to autoplay media without restriction.
  NewTabWithUrl(url.mojom.Url url, bool from_user_interaction);

  // Invoked when the user uses Ctrl-N or Ctrl-Shift-N to open a new window.
  NewWindow(bool incognito);

  // Invoked when an accelerator is used to open the file manager.
  OpenFileManager();

  // Invoked when the user opens Crosh.
  OpenCrosh();

  // Invoked when an accelerator is used to open help center.
  OpenGetHelp();

  // Invoked when the user uses Shift+Ctrl+T to restore the closed tab.
  RestoreTab();

  // Show the keyboard shortcut viewer.
  ShowKeyboardShortcutViewer();

  // Shows the task manager window.
  ShowTaskManager();

  // Opens the feedback page for "Report Issue". If |from_assistant| is
  // true then the page is triggered from Assistant.
  OpenFeedbackPage(bool from_assistant);
};
