Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / components / sessions / content / content_serialized_navigation_driver.cc
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 #include "components/sessions/content/content_serialized_navigation_driver.h"
6
7 #include "base/memory/singleton.h"
8 #include "components/sessions/serialized_navigation_entry.h"
9 #include "content/public/common/page_state.h"
10 #include "content/public/common/referrer.h"
11
12 namespace sessions {
13
14 // static
15 SerializedNavigationDriver* SerializedNavigationDriver::Get() {
16   return ContentSerializedNavigationDriver::GetInstance();
17 }
18
19 // static
20 ContentSerializedNavigationDriver*
21 ContentSerializedNavigationDriver::GetInstance() {
22   return Singleton<ContentSerializedNavigationDriver,
23       LeakySingletonTraits<ContentSerializedNavigationDriver>>::get();
24 }
25
26 ContentSerializedNavigationDriver::ContentSerializedNavigationDriver() {
27 }
28
29 ContentSerializedNavigationDriver::~ContentSerializedNavigationDriver() {
30 }
31
32 int ContentSerializedNavigationDriver::GetDefaultReferrerPolicy() const {
33   return blink::WebReferrerPolicyDefault;
34 }
35
36 std::string
37 ContentSerializedNavigationDriver::GetSanitizedPageStateForPickle(
38     const SerializedNavigationEntry* navigation) const {
39   if (!navigation->has_post_data_) {
40     return navigation->encoded_page_state_;
41   }
42   content::PageState page_state =
43       content::PageState::CreateFromEncodedData(
44           navigation->encoded_page_state_);
45   return page_state.RemovePasswordData().ToEncodedData();
46 }
47
48 void ContentSerializedNavigationDriver::Sanitize(
49     SerializedNavigationEntry* navigation) const {
50   content::Referrer old_referrer(
51       navigation->referrer_url_,
52       static_cast<blink::WebReferrerPolicy>(navigation->referrer_policy_));
53   content::Referrer new_referrer =
54       content::Referrer::SanitizeForRequest(navigation->virtual_url_,
55                                             old_referrer);
56
57   // No need to compare the policy, as it doesn't change during
58   // sanitization. If there has been a change, the referrer needs to be
59   // stripped from the page state as well.
60   if (navigation->referrer_url_ != new_referrer.url) {
61     navigation->referrer_url_ = GURL();
62     navigation->referrer_policy_ = GetDefaultReferrerPolicy();
63     navigation->encoded_page_state_ =
64         content::PageState::CreateFromEncodedData(
65             navigation->encoded_page_state_)
66             .RemoveReferrer()
67             .ToEncodedData();
68   }
69 }
70
71 }  // namespace sessions