1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_FRAME_HOST_NAVIGATION_REQUEST_H_
6#define CONTENT_BROWSER_FRAME_HOST_NAVIGATION_REQUEST_H_
7
8#include "base/basictypes.h"
9#include "base/memory/ref_counted.h"
10#include "content/browser/frame_host/navigation_request_info.h"
11#include "content/common/content_export.h"
12
13namespace content {
14class ResourceRequestBody;
15
16// PlzNavigate
17// A UI thread object that owns a navigation request until it commits. It
18// ensures the UI thread can start a navigation request in the
19// ResourceDispatcherHost (that lives on the IO thread).
20// TODO(clamy): Describe the interactions between the UI and IO thread during
21// the navigation following its refactoring.
22class NavigationRequest {
23 public:
24  NavigationRequest(const NavigationRequestInfo& info,
25                    int64 frame_tree_node_id);
26
27  ~NavigationRequest();
28
29  // Called on the UI thread by the RenderFrameHostManager which owns the
30  // NavigationRequest. After calling this function, |body| can no longer be
31  // manipulated on the UI thread.
32  void BeginNavigation(scoped_refptr<ResourceRequestBody> body);
33
34  // Called on the UI thread by the RenderFrameHostManager which owns the
35  // NavigationRequest whenever this navigation request should be canceled.
36  void CancelNavigation();
37
38  const NavigationRequestInfo& info() const { return info_; }
39
40  int64 frame_tree_node_id() const { return frame_tree_node_id_; }
41
42  int64 navigation_request_id() const { return navigation_request_id_; }
43
44 private:
45  const int64 navigation_request_id_;
46  const NavigationRequestInfo info_;
47  const int64 frame_tree_node_id_;
48
49  DISALLOW_COPY_AND_ASSIGN(NavigationRequest);
50};
51
52}  // namespace content
53
54#endif  // CONTENT_BROWSER_FRAME_HOST_NAVIGATION_REQUEST_H_
55