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

// Multiply-included message file, no traditional include guard.
#include "content/public/common/common_param_traits.h"
#include "content/public/common/referrer.h"
#include "ipc/ipc_message.h"
#include "ipc/ipc_message_macros.h"
#include "ipc/ipc_param_traits.h"
#include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
#include "ui/gfx/size.h"
#include "url/gurl.h"

#define IPC_MESSAGE_START PrerenderMsgStart

// PrerenderLinkManager Messages
// These are messages sent from the renderer to the browser in
// relation to <link rel=prerender> elements.

IPC_STRUCT_BEGIN(PrerenderAttributes)
  IPC_STRUCT_MEMBER(GURL, url)
  IPC_STRUCT_MEMBER(uint32, rel_types)
IPC_STRUCT_END()

// Notifies of the insertion of a <link rel=prerender> element in the
// document.
IPC_MESSAGE_CONTROL5(PrerenderHostMsg_AddLinkRelPrerender,
                     int /* prerender_id, assigned by WebPrerendererClient */,
                     PrerenderAttributes,
                     content::Referrer,
                     gfx::Size,
                     int /* render_view_route_id of launcher */)

// Notifies on removal of a <link rel=prerender> element from the document.
IPC_MESSAGE_CONTROL1(PrerenderHostMsg_CancelLinkRelPrerender,
                     int /* prerender_id, assigned by WebPrerendererClient */)

// Notifies on unloading a <link rel=prerender> element from a frame.
IPC_MESSAGE_CONTROL1(PrerenderHostMsg_AbandonLinkRelPrerender,
                     int /* prerender_id, assigned by WebPrerendererClient */)

// PrerenderDispatcher Messages
// These are messages sent from the browser to the renderer in relation to
// running prerenders.

// Tells a renderer if it's currently being prerendered.  Must only be set
// to true before any navigation occurs, and only set to false at most once
// after that.
IPC_MESSAGE_ROUTED1(PrerenderMsg_SetIsPrerendering,
                    bool /* whether the RenderView is prerendering */)

// Signals to launcher that a prerender is running.
IPC_MESSAGE_CONTROL1(PrerenderMsg_OnPrerenderStart,
                     int /* prerender_id */)

// Signals to launcher that a prerender is running.
IPC_MESSAGE_CONTROL1(PrerenderMsg_OnPrerenderStopLoading,
                     int /* prerender_id */)

// Signals to launcher that a prerender has had it's 'domcontentloaded' event.
IPC_MESSAGE_CONTROL1(PrerenderMsg_OnPrerenderDomContentLoaded,
                     int /* prerender_id */)

// Signals to a launcher that a new alias has been added to a prerender.
IPC_MESSAGE_CONTROL1(PrerenderMsg_OnPrerenderAddAlias,
                     GURL /* url */)

// Signals to a launcher that a new alias has been added to a prerender.
IPC_MESSAGE_CONTROL1(PrerenderMsg_OnPrerenderRemoveAliases,
                     std::vector<GURL> /* urls */)

// Signals to a launcher that a prerender is no longer running.
IPC_MESSAGE_CONTROL1(PrerenderMsg_OnPrerenderStop,
                     int /* prerender_id */)