Home | History | Annotate | Download | only in renderer
      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_
    110