Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: components/html_viewer/html_frame_properties.cc

Issue 1677293002: Bye bye Mandoline (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moar Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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/html_viewer/html_frame_properties.h"
6
7 #include <stddef.h>
8 #include <utility>
9
10 #include "base/logging.h"
11 #include "base/pickle.h"
12 #include "mojo/common/common_type_converters.h"
13 #include "third_party/WebKit/public/platform/WebString.h"
14 #include "third_party/WebKit/public/web/WebDocument.h"
15 #include "third_party/WebKit/public/web/WebFrame.h"
16 #include "third_party/WebKit/public/web/WebSandboxFlags.h"
17 #include "url/origin.h"
18 #include "url/url_util.h"
19
20 namespace html_viewer {
21
22 const char kPropertyFrameTreeScope[] = "html-viewer-frame-tree-scope";
23 const char kPropertyFrameOrigin[] = "html-viewer-replicated-frame-origin";
24 const char kPropertyFrameName[] = "html-viewer-replicated-frame-name";
25 const char kPropertyFrameSandboxFlags[] = "html-viewer-sandbox-flags";
26
27 namespace {
28
29 mojo::Array<uint8_t> IntToClientPropertyArray(int value) {
30 mojo::Array<uint8_t> value_array(sizeof(value));
31 memcpy(&(value_array.front()), &value, sizeof(value));
32 return value_array;
33 }
34
35 bool IntFromClientPropertyArray(const mojo::Array<uint8_t>& value_array,
36 int* value) {
37 if (value_array.is_null())
38 return false;
39
40 CHECK(value_array.size() == sizeof(int));
41 memcpy(value, &(value_array.front()), sizeof(int));
42 return true;
43 }
44
45 } // namespace
46
47 mojo::Array<uint8_t> FrameNameToClientProperty(const blink::WebString& name) {
48 mojo::String mojo_name;
49 if (name.isNull())
50 return mojo::Array<uint8_t>();
51 return mojo::Array<uint8_t>::From<std::string>(name.utf8());
52 }
53
54 blink::WebString FrameNameFromClientProperty(
55 const mojo::Array<uint8_t>& new_data) {
56 if (new_data.is_null())
57 return blink::WebString();
58
59 return blink::WebString::fromUTF8(new_data.To<std::string>());
60 }
61
62 mojo::Array<uint8_t> FrameTreeScopeToClientProperty(
63 blink::WebTreeScopeType scope_type) {
64 return IntToClientPropertyArray(static_cast<int>(scope_type));
65 }
66
67 bool FrameTreeScopeFromClientProperty(const mojo::Array<uint8_t>& new_data,
68 blink::WebTreeScopeType* scope) {
69 if (new_data.is_null())
70 return false;
71
72 int scope_as_int;
73 CHECK(IntFromClientPropertyArray(new_data, &scope_as_int));
74 CHECK(scope_as_int >= 0 &&
75 scope_as_int <= static_cast<int>(blink::WebTreeScopeType::Last));
76 *scope = static_cast<blink::WebTreeScopeType>(scope_as_int);
77 return true;
78 }
79
80 mojo::Array<uint8_t> FrameSandboxFlagsToClientProperty(
81 blink::WebSandboxFlags flags) {
82 return IntToClientPropertyArray(static_cast<int>(flags));
83 }
84
85 bool FrameSandboxFlagsFromClientProperty(const mojo::Array<uint8_t>& new_data,
86 blink::WebSandboxFlags* flags) {
87 if (new_data.is_null())
88 return false;
89
90 // blink::WebSandboxFlags is a bitmask, so not error checking.
91 int flags_as_int;
92 CHECK(IntFromClientPropertyArray(new_data, &flags_as_int));
93 *flags = static_cast<blink::WebSandboxFlags>(flags_as_int);
94 return true;
95 }
96
97 url::Origin FrameOrigin(blink::WebFrame* frame) {
98 std::string scheme = frame->document().securityOrigin().protocol().utf8();
99 if (!url::IsStandard(scheme.c_str(),
100 url::Component(0, static_cast<int>(scheme.length())))) {
101 return url::Origin();
102 }
103 return frame->document().securityOrigin();
104 }
105
106 mojo::Array<uint8_t> FrameOriginToClientProperty(blink::WebFrame* frame) {
107 const url::Origin origin = FrameOrigin(frame);
108 base::Pickle pickle;
109 pickle.WriteBool(origin.unique());
110 pickle.WriteString(origin.scheme());
111 pickle.WriteString(origin.host());
112 pickle.WriteUInt16(origin.port());
113 mojo::Array<uint8_t> origin_array(pickle.size());
114 memcpy(&(origin_array.front()), pickle.data(), pickle.size());
115 return origin_array;
116 }
117
118 url::Origin FrameOriginFromClientProperty(const mojo::Array<uint8_t>& data) {
119 if (data.is_null())
120 return url::Origin();
121
122 CHECK(data.size());
123 CHECK(data.size() < static_cast<size_t>(std::numeric_limits<int>::max()));
124 static_assert(sizeof(uint8_t) == sizeof(unsigned char),
125 "uint8_t must be the same size as unsigned char");
126 const base::Pickle pickle(reinterpret_cast<const char*>(&(data.front())),
127 static_cast<int>(data.size()));
128 CHECK(pickle.data());
129 base::PickleIterator iter(pickle);
130 bool unique = false;
131 std::string scheme;
132 std::string host;
133 uint16_t port = 0;
134 CHECK(iter.ReadBool(&unique));
135 CHECK(iter.ReadString(&scheme));
136 CHECK(iter.ReadString(&host));
137 CHECK(iter.ReadUInt16(&port));
138 const url::Origin result =
139 unique ? url::Origin()
140 : url::Origin::UnsafelyCreateOriginWithoutNormalization(
141 scheme, host, port);
142 // If a unique origin was created, but the unique flag wasn't set, then
143 // the values provided to 'UnsafelyCreateOriginWithoutNormalization' were
144 // invalid; kill the renderer.
145 CHECK(!(!unique && result.unique()));
146 return result;
147 }
148
149 void AddToClientPropertiesIfValid(
150 const std::string& name,
151 mojo::Array<uint8_t> value,
152 mojo::Map<mojo::String, mojo::Array<uint8_t>>* client_properties) {
153 if (!value.is_null())
154 (*client_properties)[name] = std::move(value);
155 }
156
157 mojo::Array<uint8_t> GetValueFromClientProperties(
158 const std::string& name,
159 const mojo::Map<mojo::String, mojo::Array<uint8_t>>& properties) {
160 auto iter = properties.find(name);
161 return iter == properties.end() ? mojo::Array<uint8_t>()
162 : iter.GetValue().Clone();
163 }
164
165 } // namespace html_viewer
OLDNEW
« no previous file with comments | « components/html_viewer/html_frame_properties.h ('k') | components/html_viewer/html_frame_tree_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698