// 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 content.mojom;

import "content/common/input/input_handler.mojom";
import "content/common/native_types.mojom";
import "content/common/widget.mojom";
import "mojo/public/mojom/base/thread_priority.mojom";
import "mojo/public/mojom/base/time.mojom";
import "url/mojom/origin.mojom";
import "url/mojom/url.mojom";

interface RenderMessageFilter {
  // Synchronously generates a new routing ID for the caller.
  [Sync] GenerateRoutingID() => (int32 routing_id);

  // Similar to CreateWindow, except used for sub-widgets, like <select>
  // dropdowns.
  [Sync] CreateNewWidget(int32 opener_id, content.mojom.WebPopupType popup_type, Widget widget)
      => (int32 route_id);

  // Similar to CreateWidget except the widget is a full screen window.
  [Sync] CreateFullscreenWidget(int32 opener_id, Widget widget)
      => (int32 route_id);

  // Requests that the browser cache |data| associated with |url| and |expected_response_time|.
  // TODO(https://crbug.com/779444): Verify or remove |url| and |cache_storage_origin|.
  DidGenerateCacheableMetadata(url.mojom.Url url,
                               mojo_base.mojom.Time expected_response_time,
                               array<uint8> data);

  // Requests that the browser cache |data| for the specified CacheStorage entry.
  DidGenerateCacheableMetadataInCacheStorage(
      url.mojom.Url url, mojo_base.mojom.Time expected_response_time,
      array<uint8> data, url.mojom.Origin cache_storage_origin,
      string cache_storage_cache_name);

  // A renderer sends this when it wants to know whether a gpu process exists.
  [Sync] HasGpuProcess() => (bool has_gpu_process);

  // Asks the browser to change the priority of thread.
  [EnableIf=supports_thread_priorities]
  SetThreadPriority(int32 platform_thread_id,
                    mojo_base.mojom.ThreadPriority thread_priority);
};
