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

Side by Side Diff: third_party/WebKit/WebCore/bindings/v8/custom/V8LocationCustom.cpp

Issue 46097: WebKit merge 41660:41709 (WebKit side).... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 9 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer 11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the 12 * in the documentation and/or other materials provided with the
13 * distribution. 13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its 14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from 15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission. 16 * this software without specific prior written permission.
17 * 17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 { 99 {
100 INC_STATS("DOM.Location.host._set"); 100 INC_STATS("DOM.Location.host._set");
101 v8::Handle<v8::Object> holder = info.Holder(); 101 v8::Handle<v8::Object> holder = info.Holder();
102 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder); 102 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder);
103 String host = toWebCoreString(value); 103 String host = toWebCoreString(value);
104 104
105 Frame* frame = imp->frame(); 105 Frame* frame = imp->frame();
106 if (!frame) 106 if (!frame)
107 return; 107 return;
108 108
109 KURL url = frame->loader()->url(); 109 KURL url = frame->loader()->url();
110 String newHost = host.left(host.find(":")); 110 String newHost = host.left(host.find(":"));
111 String newPort = host.substring(host.find(":") + 1); 111 String newPort = host.substring(host.find(":") + 1);
112 url.setHost(newHost); 112 url.setHost(newHost);
113 url.setPort(newPort.toUInt()); 113 url.setPort(newPort.toUInt());
114 114
115 navigateIfAllowed(frame, url, false, false); 115 navigateIfAllowed(frame, url, false, false);
116 } 116 }
117 117
118 ACCESSOR_SETTER(LocationHostname) 118 ACCESSOR_SETTER(LocationHostname)
119 { 119 {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 { 157 {
158 INC_STATS("DOM.Location.pathname._set"); 158 INC_STATS("DOM.Location.pathname._set");
159 v8::Handle<v8::Object> holder = info.Holder(); 159 v8::Handle<v8::Object> holder = info.Holder();
160 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder); 160 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder);
161 String pathname = toWebCoreString(value); 161 String pathname = toWebCoreString(value);
162 162
163 Frame* frame = imp->frame(); 163 Frame* frame = imp->frame();
164 if (!frame) 164 if (!frame)
165 return; 165 return;
166 166
167 KURL url = frame->loader()->url(); 167 KURL url = frame->loader()->url();
168 url.setPath(pathname); 168 url.setPath(pathname);
169 169
170 navigateIfAllowed(frame, url, false, false); 170 navigateIfAllowed(frame, url, false, false);
171 } 171 }
172 172
173 ACCESSOR_SETTER(LocationPort) 173 ACCESSOR_SETTER(LocationPort)
174 { 174 {
175 INC_STATS("DOM.Location.port._set"); 175 INC_STATS("DOM.Location.port._set");
176 v8::Handle<v8::Object> holder = info.Holder(); 176 v8::Handle<v8::Object> holder = info.Holder();
177 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder); 177 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder);
178 String port = toWebCoreString(value); 178 String port = toWebCoreString(value);
179 179
180 Frame* frame = imp->frame(); 180 Frame* frame = imp->frame();
181 if (!frame) 181 if (!frame)
182 return; 182 return;
183 183
184 KURL url = frame->loader()->url(); 184 KURL url = frame->loader()->url();
185 url.setPort(port.toUInt()); 185 url.setPort(port.toUInt());
186 186
187 navigateIfAllowed(frame, url, false, false); 187 navigateIfAllowed(frame, url, false, false);
188 } 188 }
189 189
190 ACCESSOR_SETTER(LocationProtocol) 190 ACCESSOR_SETTER(LocationProtocol)
191 { 191 {
192 INC_STATS("DOM.Location.protocol._set"); 192 INC_STATS("DOM.Location.protocol._set");
193 v8::Handle<v8::Object> holder = info.Holder(); 193 v8::Handle<v8::Object> holder = info.Holder();
194 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder); 194 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::LOCA TION, info.This()); 228 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::LOCA TION, info.This());
229 if (holder.IsEmpty()) { 229 if (holder.IsEmpty()) {
230 // can only reach here by 'object.__proto__.func', and it should passed 230 // can only reach here by 'object.__proto__.func', and it should passed
231 // domain security check already 231 // domain security check already
232 return privateTemplate->GetFunction(); 232 return privateTemplate->GetFunction();
233 } 233 }
234 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder); 234 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder);
235 if (!V8Proxy::CanAccessFrame(imp->frame(), false)) { 235 if (!V8Proxy::CanAccessFrame(imp->frame(), false)) {
236 static v8::Persistent<v8::FunctionTemplate> sharedTemplate = v8::Persist ent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(v8LocationReloadCallbac k, v8::Handle<v8::Value>(), v8::Signature::New(V8Location::GetRawTemplate()))); 236 static v8::Persistent<v8::FunctionTemplate> sharedTemplate = v8::Persist ent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(v8LocationReloadCallbac k, v8::Handle<v8::Value>(), v8::Signature::New(V8Location::GetRawTemplate())));
237 return sharedTemplate->GetFunction(); 237 return sharedTemplate->GetFunction();
238 } else { 238 } else
239 return privateTemplate->GetFunction(); 239 return privateTemplate->GetFunction();
240 }
241 } 240 }
242 241
243 ACCESSOR_GETTER(LocationReplace) 242 ACCESSOR_GETTER(LocationReplace)
244 { 243 {
245 INC_STATS("DOM.Location.replace._get"); 244 INC_STATS("DOM.Location.replace._get");
246 static v8::Persistent<v8::FunctionTemplate> privateTemplate = v8::Persistent <v8::FunctionTemplate>::New(v8::FunctionTemplate::New(v8LocationReplaceCallback, v8::Handle<v8::Value>(), v8::Signature::New(V8Location::GetRawTemplate()))); 245 static v8::Persistent<v8::FunctionTemplate> privateTemplate = v8::Persistent <v8::FunctionTemplate>::New(v8::FunctionTemplate::New(v8LocationReplaceCallback, v8::Handle<v8::Value>(), v8::Signature::New(V8Location::GetRawTemplate())));
247 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::LOCA TION, info.This()); 246 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::LOCA TION, info.This());
248 if (holder.IsEmpty()) { 247 if (holder.IsEmpty()) {
249 // can only reach here by 'object.__proto__.func', and it should passed 248 // can only reach here by 'object.__proto__.func', and it should passed
250 // domain security check already 249 // domain security check already
251 return privateTemplate->GetFunction(); 250 return privateTemplate->GetFunction();
252 } 251 }
253 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder); 252 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder);
254 if (!V8Proxy::CanAccessFrame(imp->frame(), false)) { 253 if (!V8Proxy::CanAccessFrame(imp->frame(), false)) {
255 static v8::Persistent<v8::FunctionTemplate> sharedTemplate = v8::Persist ent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(v8LocationReplaceCallba ck, v8::Handle<v8::Value>(), v8::Signature::New(V8Location::GetRawTemplate()))); 254 static v8::Persistent<v8::FunctionTemplate> sharedTemplate = v8::Persist ent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(v8LocationReplaceCallba ck, v8::Handle<v8::Value>(), v8::Signature::New(V8Location::GetRawTemplate())));
256 return sharedTemplate->GetFunction(); 255 return sharedTemplate->GetFunction();
257 } else { 256 } else
258 return privateTemplate->GetFunction(); 257 return privateTemplate->GetFunction();
259 }
260 } 258 }
261 259
262 ACCESSOR_GETTER(LocationAssign) 260 ACCESSOR_GETTER(LocationAssign)
263 { 261 {
264 INC_STATS("DOM.Location.assign._get"); 262 INC_STATS("DOM.Location.assign._get");
265 static v8::Persistent<v8::FunctionTemplate> privateTemplate = 263 static v8::Persistent<v8::FunctionTemplate> privateTemplate =
266 v8::Persistent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(v8Locati onAssignCallback, v8::Handle<v8::Value>(), v8::Signature::New(V8Location::GetRaw Template()))); 264 v8::Persistent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(v8Locati onAssignCallback, v8::Handle<v8::Value>(), v8::Signature::New(V8Location::GetRaw Template())));
267 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::LOCA TION, info.This()); 265 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::LOCA TION, info.This());
268 if (holder.IsEmpty()) { 266 if (holder.IsEmpty()) {
269 // can only reach here by 'object.__proto__.func', and it should passed 267 // can only reach here by 'object.__proto__.func', and it should passed
270 // domain security check already 268 // domain security check already
271 return privateTemplate->GetFunction(); 269 return privateTemplate->GetFunction();
272 } 270 }
273 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder); 271 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder);
274 if (!V8Proxy::CanAccessFrame(imp->frame(), false)) { 272 if (!V8Proxy::CanAccessFrame(imp->frame(), false)) {
275 static v8::Persistent<v8::FunctionTemplate> sharedTemplate = v8::Persist ent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(v8LocationAssignCallbac k, v8::Handle<v8::Value>(), v8::Signature::New(V8Location::GetRawTemplate()))); 273 static v8::Persistent<v8::FunctionTemplate> sharedTemplate = v8::Persist ent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New(v8LocationAssignCallbac k, v8::Handle<v8::Value>(), v8::Signature::New(V8Location::GetRawTemplate())));
276 return sharedTemplate->GetFunction(); 274 return sharedTemplate->GetFunction();
277 } else { 275 } else
278 return privateTemplate->GetFunction(); 276 return privateTemplate->GetFunction();
279 }
280 } 277 }
281 278
282 CALLBACK_FUNC_DECL(LocationReload) 279 CALLBACK_FUNC_DECL(LocationReload)
283 { 280 {
284 // FIXME: we ignore the "forceget" parameter. 281 // FIXME: we ignore the "forceget" parameter.
285 282
286 INC_STATS("DOM.Location.reload"); 283 INC_STATS("DOM.Location.reload");
287 v8::Handle<v8::Value> holder = args.Holder(); 284 v8::Handle<v8::Value> holder = args.Holder();
288 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder); 285 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho lder);
289 286
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 375
379 NAMED_ACCESS_CHECK(Location) 376 NAMED_ACCESS_CHECK(Location)
380 { 377 {
381 ASSERT(V8ClassIndex::FromInt(data->Int32Value()) == V8ClassIndex::LOCATION); 378 ASSERT(V8ClassIndex::FromInt(data->Int32Value()) == V8ClassIndex::LOCATION);
382 // Only allow same origin access 379 // Only allow same origin access
383 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho st); 380 Location* imp = V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, ho st);
384 return V8Proxy::CanAccessFrame(imp->frame(), false); 381 return V8Proxy::CanAccessFrame(imp->frame(), false);
385 } 382 }
386 383
387 } // namespace WebCore 384 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698