Home | History | Annotate | Download | only in web
      1 /*
      2  * Copyright (C) 2009 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #include "config.h"
     32 #include "public/web/WebHistoryItem.h"
     33 
     34 #include "bindings/core/v8/SerializedScriptValue.h"
     35 #include "core/loader/HistoryItem.h"
     36 #include "platform/network/FormData.h"
     37 #include "platform/weborigin/KURL.h"
     38 #include "public/platform/WebFloatPoint.h"
     39 #include "public/platform/WebHTTPBody.h"
     40 #include "public/platform/WebPoint.h"
     41 #include "public/platform/WebString.h"
     42 #include "public/platform/WebVector.h"
     43 #include "public/web/WebSerializedScriptValue.h"
     44 #include "wtf/text/StringHash.h"
     45 
     46 namespace blink {
     47 
     48 void WebHistoryItem::initialize()
     49 {
     50     m_private = HistoryItem::create();
     51 }
     52 
     53 void WebHistoryItem::reset()
     54 {
     55     m_private.reset();
     56 }
     57 
     58 void WebHistoryItem::assign(const WebHistoryItem& other)
     59 {
     60     m_private = other.m_private;
     61 }
     62 
     63 WebString WebHistoryItem::urlString() const
     64 {
     65     return m_private->urlString();
     66 }
     67 
     68 void WebHistoryItem::setURLString(const WebString& url)
     69 {
     70     m_private->setURLString(KURL(ParsedURLString, url).string());
     71 }
     72 
     73 WebString WebHistoryItem::referrer() const
     74 {
     75     return m_private->referrer().referrer;
     76 }
     77 
     78 WebReferrerPolicy WebHistoryItem::referrerPolicy() const
     79 {
     80     return static_cast<WebReferrerPolicy>(m_private->referrer().referrerPolicy);
     81 }
     82 
     83 void WebHistoryItem::setReferrer(const WebString& referrer, WebReferrerPolicy referrerPolicy)
     84 {
     85     m_private->setReferrer(Referrer(referrer, static_cast<ReferrerPolicy>(referrerPolicy)));
     86 }
     87 
     88 WebString WebHistoryItem::target() const
     89 {
     90     return m_private->target();
     91 }
     92 
     93 void WebHistoryItem::setTarget(const WebString& target)
     94 {
     95     m_private->setTarget(target);
     96 }
     97 
     98 WebFloatPoint WebHistoryItem::pinchViewportScrollOffset() const
     99 {
    100     return m_private->pinchViewportScrollPoint();
    101 }
    102 
    103 void WebHistoryItem::setPinchViewportScrollOffset(const WebFloatPoint& scrollOffset)
    104 {
    105     m_private->setPinchViewportScrollPoint(scrollOffset);
    106 }
    107 
    108 WebPoint WebHistoryItem::scrollOffset() const
    109 {
    110     return m_private->scrollPoint();
    111 }
    112 
    113 void WebHistoryItem::setScrollOffset(const WebPoint& scrollOffset)
    114 {
    115     m_private->setScrollPoint(scrollOffset);
    116 }
    117 
    118 float WebHistoryItem::pageScaleFactor() const
    119 {
    120     return m_private->pageScaleFactor();
    121 }
    122 
    123 void WebHistoryItem::setPageScaleFactor(float scale)
    124 {
    125     m_private->setPageScaleFactor(scale);
    126 }
    127 
    128 WebVector<WebString> WebHistoryItem::documentState() const
    129 {
    130     return m_private->documentState();
    131 }
    132 
    133 void WebHistoryItem::setDocumentState(const WebVector<WebString>& state)
    134 {
    135     // FIXME: would be nice to avoid the intermediate copy
    136     Vector<String> ds;
    137     for (size_t i = 0; i < state.size(); ++i)
    138         ds.append(state[i]);
    139     m_private->setDocumentState(ds);
    140 }
    141 
    142 long long WebHistoryItem::itemSequenceNumber() const
    143 {
    144     return m_private->itemSequenceNumber();
    145 }
    146 
    147 void WebHistoryItem::setItemSequenceNumber(long long itemSequenceNumber)
    148 {
    149     m_private->setItemSequenceNumber(itemSequenceNumber);
    150 }
    151 
    152 long long WebHistoryItem::documentSequenceNumber() const
    153 {
    154     return m_private->documentSequenceNumber();
    155 }
    156 
    157 void WebHistoryItem::setDocumentSequenceNumber(long long documentSequenceNumber)
    158 {
    159     m_private->setDocumentSequenceNumber(documentSequenceNumber);
    160 }
    161 
    162 long long WebHistoryItem::frameSequenceNumber() const
    163 {
    164     return m_private->frameSequenceNumber();
    165 }
    166 
    167 void WebHistoryItem::setFrameSequenceNumber(long long frameSequenceNumber)
    168 {
    169     m_private->setFrameSequenceNumber(frameSequenceNumber);
    170 }
    171 
    172 WebSerializedScriptValue WebHistoryItem::stateObject() const
    173 {
    174     return WebSerializedScriptValue(m_private->stateObject());
    175 }
    176 
    177 void WebHistoryItem::setStateObject(const WebSerializedScriptValue& object)
    178 {
    179     m_private->setStateObject(object);
    180 }
    181 
    182 WebString WebHistoryItem::httpContentType() const
    183 {
    184     return m_private->formContentType();
    185 }
    186 
    187 void WebHistoryItem::setHTTPContentType(const WebString& httpContentType)
    188 {
    189     m_private->setFormContentType(httpContentType);
    190 }
    191 
    192 WebHTTPBody WebHistoryItem::httpBody() const
    193 {
    194     return WebHTTPBody(m_private->formData());
    195 }
    196 
    197 void WebHistoryItem::setHTTPBody(const WebHTTPBody& httpBody)
    198 {
    199     m_private->setFormData(httpBody);
    200 }
    201 
    202 WebVector<WebString> WebHistoryItem::getReferencedFilePaths() const
    203 {
    204     HashSet<String> filePaths;
    205     const FormData* formData = m_private->formData();
    206     if (formData) {
    207         for (size_t i = 0; i < formData->elements().size(); ++i) {
    208             const FormDataElement& element = formData->elements()[i];
    209             if (element.m_type == FormDataElement::encodedFile)
    210                 filePaths.add(element.m_filename);
    211         }
    212     }
    213 
    214     const Vector<String>& referencedFilePaths = m_private->getReferencedFilePaths();
    215     for (size_t i = 0; i < referencedFilePaths.size(); ++i)
    216         filePaths.add(referencedFilePaths[i]);
    217 
    218     Vector<String> results;
    219     copyToVector(filePaths, results);
    220     return results;
    221 }
    222 
    223 WebHistoryItem::WebHistoryItem(const PassRefPtr<HistoryItem>& item)
    224     : m_private(item)
    225 {
    226 }
    227 
    228 WebHistoryItem& WebHistoryItem::operator=(const PassRefPtr<HistoryItem>& item)
    229 {
    230     m_private = item;
    231     return *this;
    232 }
    233 
    234 WebHistoryItem::operator PassRefPtr<HistoryItem>() const
    235 {
    236     return m_private.get();
    237 }
    238 
    239 } // namespace blink
    240