Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / renderer / history_entry.h
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 /*
6  * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
7  * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
8  *     (http://www.torchmobile.com/)
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  *
14  * 1.  Redistributions of source code must retain the above copyright
15  *     notice, this list of conditions and the following disclaimer.
16  * 2.  Redistributions in binary form must reproduce the above copyright
17  *     notice, this list of conditions and the following disclaimer in the
18  *     documentation and/or other materials provided with the distribution.
19  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
20  *     its contributors may be used to endorse or promote products derived
21  *     from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
24  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
27  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
30  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
32  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34
35 #ifndef CONTENT_RENDERER_HISTORY_ENTRY_H_
36 #define CONTENT_RENDERER_HISTORY_ENTRY_H_
37
38 #include "base/containers/hash_tables.h"
39 #include "base/memory/scoped_ptr.h"
40 #include "base/memory/scoped_vector.h"
41 #include "content/common/content_export.h"
42 #include "third_party/WebKit/public/platform/WebURLRequest.h"
43 #include "third_party/WebKit/public/web/WebHistoryItem.h"
44
45 namespace blink {
46 class WebFrame;
47 }
48
49 namespace content {
50 class RenderFrameImpl;
51 class RenderViewImpl;
52
53 const int kInvalidFrameRoutingID = -1;
54
55 class CONTENT_EXPORT HistoryEntry {
56  public:
57   class HistoryNode {
58    public:
59     HistoryNode(HistoryEntry* entry,
60                 const blink::WebHistoryItem& item,
61                 int64_t frame_id);
62     ~HistoryNode();
63
64     HistoryNode* AddChild(const blink::WebHistoryItem& item, int64_t frame_id);
65     HistoryNode* AddChild();
66     HistoryNode* CloneAndReplace(HistoryEntry* new_entry,
67                                  const blink::WebHistoryItem& new_item,
68                                  bool clone_children_of_target,
69                                  RenderFrameImpl* target_frame,
70                                  RenderFrameImpl* current_frame);
71     blink::WebHistoryItem& item() { return item_; }
72     void set_item(const blink::WebHistoryItem& item);
73     std::vector<HistoryNode*>& children() const { return children_->get(); }
74     void RemoveChildren();
75
76    private:
77     HistoryEntry* entry_;
78     scoped_ptr<ScopedVector<HistoryNode> > children_;
79     blink::WebHistoryItem item_;
80   };
81
82   HistoryEntry(const blink::WebHistoryItem& root, int64_t frame_id);
83   HistoryEntry();
84   ~HistoryEntry();
85
86   HistoryEntry* CloneAndReplace(const blink::WebHistoryItem& newItem,
87                                 bool clone_children_of_target,
88                                 RenderFrameImpl* target_frame,
89                                 RenderViewImpl* render_view);
90
91   HistoryNode* GetHistoryNodeForFrame(RenderFrameImpl* frame);
92   blink::WebHistoryItem GetItemForFrame(RenderFrameImpl* frame);
93   const blink::WebHistoryItem& root() const { return root_->item(); }
94   HistoryNode* root_history_node() const { return root_.get(); }
95
96  private:
97
98   scoped_ptr<HistoryNode> root_;
99
100   typedef base::hash_map<uint64_t, HistoryNode*> FramesToItems;
101   FramesToItems frames_to_items_;
102
103   typedef base::hash_map<std::string, HistoryNode*> UniqueNamesToItems;
104   UniqueNamesToItems unique_names_to_items_;
105 };
106
107 }  // namespace content
108
109 #endif  // CONTENT_RENDERER_HISTORY_ENTRY_H_