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

Side by Side Diff: third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp

Issue 2714943004: Move unique name generation and tracking into //content. (Closed)
Patch Set: . Created 3 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "web/WebRemoteFrameImpl.h" 5 #include "web/WebRemoteFrameImpl.h"
6 6
7 #include "bindings/core/v8/RemoteWindowProxy.h" 7 #include "bindings/core/v8/RemoteWindowProxy.h"
8 #include "core/dom/Fullscreen.h" 8 #include "core/dom/Fullscreen.h"
9 #include "core/dom/RemoteSecurityContext.h" 9 #include "core/dom/RemoteSecurityContext.h"
10 #include "core/dom/SecurityContext.h" 10 #include "core/dom/SecurityContext.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 WebRemoteFrame* WebRemoteFrameImpl::toWebRemoteFrame() { 68 WebRemoteFrame* WebRemoteFrameImpl::toWebRemoteFrame() {
69 return this; 69 return this;
70 } 70 }
71 71
72 void WebRemoteFrameImpl::close() { 72 void WebRemoteFrameImpl::close() {
73 WebRemoteFrame::close(); 73 WebRemoteFrame::close();
74 74
75 m_selfKeepAlive.clear(); 75 m_selfKeepAlive.clear();
76 } 76 }
77 77
78 WebString WebRemoteFrameImpl::uniqueName() const {
79 NOTREACHED();
80 return WebString();
81 }
82
83 WebString WebRemoteFrameImpl::assignedName() const { 78 WebString WebRemoteFrameImpl::assignedName() const {
84 NOTREACHED(); 79 NOTREACHED();
85 return WebString(); 80 return WebString();
86 } 81 }
87 82
88 void WebRemoteFrameImpl::setName(const WebString&) { 83 void WebRemoteFrameImpl::setName(const WebString&) {
89 NOTREACHED(); 84 NOTREACHED();
90 } 85 }
91 86
92 WebVector<WebIconURL> WebRemoteFrameImpl::iconURLs(int iconTypesMask) const { 87 WebVector<WebIconURL> WebRemoteFrameImpl::iconURLs(int iconTypesMask) const {
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 } 316 }
322 317
323 WebString WebRemoteFrameImpl::layerTreeAsText(bool showDebugInfo) const { 318 WebString WebRemoteFrameImpl::layerTreeAsText(bool showDebugInfo) const {
324 NOTREACHED(); 319 NOTREACHED();
325 return WebString(); 320 return WebString();
326 } 321 }
327 322
328 WebLocalFrame* WebRemoteFrameImpl::createLocalChild( 323 WebLocalFrame* WebRemoteFrameImpl::createLocalChild(
329 WebTreeScopeType scope, 324 WebTreeScopeType scope,
330 const WebString& name, 325 const WebString& name,
331 const WebString& uniqueName,
332 WebSandboxFlags sandboxFlags, 326 WebSandboxFlags sandboxFlags,
333 WebFrameClient* client, 327 WebFrameClient* client,
334 blink::InterfaceProvider* interfaceProvider, 328 blink::InterfaceProvider* interfaceProvider,
335 blink::InterfaceRegistry* interfaceRegistry, 329 blink::InterfaceRegistry* interfaceRegistry,
336 WebFrame* previousSibling, 330 WebFrame* previousSibling,
337 const WebFrameOwnerProperties& frameOwnerProperties, 331 const WebFrameOwnerProperties& frameOwnerProperties,
338 WebFrame* opener) { 332 WebFrame* opener) {
339 WebLocalFrameImpl* child = WebLocalFrameImpl::create( 333 WebLocalFrameImpl* child = WebLocalFrameImpl::create(
340 scope, client, interfaceProvider, interfaceRegistry, opener); 334 scope, client, interfaceProvider, interfaceRegistry, opener);
341 insertAfter(child, previousSibling); 335 insertAfter(child, previousSibling);
342 RemoteFrameOwner* owner = RemoteFrameOwner::create( 336 RemoteFrameOwner* owner = RemoteFrameOwner::create(
343 static_cast<SandboxFlags>(sandboxFlags), frameOwnerProperties); 337 static_cast<SandboxFlags>(sandboxFlags), frameOwnerProperties);
344 // FIXME: currently this calls LocalFrame::init() on the created LocalFrame, 338 // FIXME: currently this calls LocalFrame::init() on the created LocalFrame,
345 // which may result in the browser observing two navigations to about:blank 339 // which may result in the browser observing two navigations to about:blank
346 // (one from the initial frame creation, and one from swapping it into the 340 // (one from the initial frame creation, and one from swapping it into the
347 // remote process). FrameLoader might need a special initialization function 341 // remote process). FrameLoader might need a special initialization function
348 // for this case to avoid that duplicate navigation. 342 // for this case to avoid that duplicate navigation.
349 child->initializeCoreFrame(frame()->host(), owner, name, uniqueName); 343 child->initializeCoreFrame(frame()->host(), owner, name);
350 // Partially related with the above FIXME--the init() call may trigger JS 344 // Partially related with the above FIXME--the init() call may trigger JS
351 // dispatch. However, 345 // dispatch. However,
352 // if the parent is remote, it should never be detached synchronously... 346 // if the parent is remote, it should never be detached synchronously...
353 DCHECK(child->frame()); 347 DCHECK(child->frame());
354 return child; 348 return child;
355 } 349 }
356 350
357 void WebRemoteFrameImpl::initializeCoreFrame(FrameHost* host, 351 void WebRemoteFrameImpl::initializeCoreFrame(FrameHost* host,
358 FrameOwner* owner, 352 FrameOwner* owner,
359 const AtomicString& name, 353 const AtomicString& name) {
360 const AtomicString& uniqueName) {
361 setCoreFrame(RemoteFrame::create(m_frameClient.get(), host, owner)); 354 setCoreFrame(RemoteFrame::create(m_frameClient.get(), host, owner));
362 frame()->createView(); 355 frame()->createView();
363 m_frame->tree().setPrecalculatedName(name, uniqueName); 356 m_frame->tree().setName(name);
364 } 357 }
365 358
366 WebRemoteFrame* WebRemoteFrameImpl::createRemoteChild( 359 WebRemoteFrame* WebRemoteFrameImpl::createRemoteChild(
367 WebTreeScopeType scope, 360 WebTreeScopeType scope,
368 const WebString& name, 361 const WebString& name,
369 const WebString& uniqueName,
370 WebSandboxFlags sandboxFlags, 362 WebSandboxFlags sandboxFlags,
371 WebRemoteFrameClient* client, 363 WebRemoteFrameClient* client,
372 WebFrame* opener) { 364 WebFrame* opener) {
373 WebRemoteFrameImpl* child = WebRemoteFrameImpl::create(scope, client, opener); 365 WebRemoteFrameImpl* child = WebRemoteFrameImpl::create(scope, client, opener);
374 appendChild(child); 366 appendChild(child);
375 RemoteFrameOwner* owner = RemoteFrameOwner::create( 367 RemoteFrameOwner* owner = RemoteFrameOwner::create(
376 static_cast<SandboxFlags>(sandboxFlags), WebFrameOwnerProperties()); 368 static_cast<SandboxFlags>(sandboxFlags), WebFrameOwnerProperties());
377 child->initializeCoreFrame(frame()->host(), owner, name, uniqueName); 369 child->initializeCoreFrame(frame()->host(), owner, name);
378 return child; 370 return child;
379 } 371 }
380 372
381 void WebRemoteFrameImpl::setWebLayer(WebLayer* layer) { 373 void WebRemoteFrameImpl::setWebLayer(WebLayer* layer) {
382 if (!frame()) 374 if (!frame())
383 return; 375 return;
384 376
385 frame()->setWebLayer(layer); 377 frame()->setWebLayer(layer);
386 } 378 }
387 379
388 void WebRemoteFrameImpl::setCoreFrame(RemoteFrame* frame) { 380 void WebRemoteFrameImpl::setCoreFrame(RemoteFrame* frame) {
389 m_frame = frame; 381 m_frame = frame;
390 } 382 }
391 383
392 WebRemoteFrameImpl* WebRemoteFrameImpl::fromFrame(RemoteFrame& frame) { 384 WebRemoteFrameImpl* WebRemoteFrameImpl::fromFrame(RemoteFrame& frame) {
393 if (!frame.client()) 385 if (!frame.client())
394 return nullptr; 386 return nullptr;
395 return static_cast<RemoteFrameClientImpl*>(frame.client())->webFrame(); 387 return static_cast<RemoteFrameClientImpl*>(frame.client())->webFrame();
396 } 388 }
397 389
398 void WebRemoteFrameImpl::setReplicatedOrigin( 390 void WebRemoteFrameImpl::setReplicatedOrigin(const WebSecurityOrigin& origin) {
399 const WebSecurityOrigin& origin) const {
400 DCHECK(frame()); 391 DCHECK(frame());
401 frame()->securityContext()->setReplicatedOrigin(origin); 392 frame()->securityContext()->setReplicatedOrigin(origin);
402 393
403 // If the origin of a remote frame changed, the accessibility object for the 394 // If the origin of a remote frame changed, the accessibility object for the
404 // owner element now points to a different child. 395 // owner element now points to a different child.
405 // 396 //
406 // TODO(dmazzoni, dcheng): there's probably a better way to solve this. 397 // TODO(dmazzoni, dcheng): there's probably a better way to solve this.
407 // Run SitePerProcessAccessibilityBrowserTest.TwoCrossSiteNavigations to 398 // Run SitePerProcessAccessibilityBrowserTest.TwoCrossSiteNavigations to
408 // ensure an alternate fix works. http://crbug.com/566222 399 // ensure an alternate fix works. http://crbug.com/566222
409 FrameOwner* owner = frame()->owner(); 400 FrameOwner* owner = frame()->owner();
410 if (owner && owner->isLocal()) { 401 if (owner && owner->isLocal()) {
411 HTMLElement* ownerElement = toHTMLFrameOwnerElement(owner); 402 HTMLElement* ownerElement = toHTMLFrameOwnerElement(owner);
412 AXObjectCache* cache = ownerElement->document().existingAXObjectCache(); 403 AXObjectCache* cache = ownerElement->document().existingAXObjectCache();
413 if (cache) 404 if (cache)
414 cache->childrenChanged(ownerElement); 405 cache->childrenChanged(ownerElement);
415 } 406 }
416 } 407 }
417 408
418 void WebRemoteFrameImpl::setReplicatedSandboxFlags( 409 void WebRemoteFrameImpl::setReplicatedSandboxFlags(WebSandboxFlags flags) {
419 WebSandboxFlags flags) const {
420 DCHECK(frame()); 410 DCHECK(frame());
421 frame()->securityContext()->enforceSandboxFlags( 411 frame()->securityContext()->enforceSandboxFlags(
422 static_cast<SandboxFlags>(flags)); 412 static_cast<SandboxFlags>(flags));
423 } 413 }
424 414
425 void WebRemoteFrameImpl::setReplicatedName(const WebString& name, 415 void WebRemoteFrameImpl::setReplicatedName(const WebString& name) {
426 const WebString& uniqueName) const {
427 DCHECK(frame()); 416 DCHECK(frame());
428 frame()->tree().setPrecalculatedName(name, uniqueName); 417 frame()->tree().setName(name);
429 } 418 }
430 419
431 void WebRemoteFrameImpl::setReplicatedFeaturePolicyHeader( 420 void WebRemoteFrameImpl::setReplicatedFeaturePolicyHeader(
432 const WebParsedFeaturePolicyHeader& parsedHeader) const { 421 const WebParsedFeaturePolicyHeader& parsedHeader) {
433 if (RuntimeEnabledFeatures::featurePolicyEnabled()) { 422 if (RuntimeEnabledFeatures::featurePolicyEnabled()) {
434 FeaturePolicy* parentFeaturePolicy = nullptr; 423 FeaturePolicy* parentFeaturePolicy = nullptr;
435 if (parent()) { 424 if (parent()) {
436 Frame* parentFrame = frame()->client()->parent(); 425 Frame* parentFrame = frame()->client()->parent();
437 parentFeaturePolicy = parentFrame->securityContext()->getFeaturePolicy(); 426 parentFeaturePolicy = parentFrame->securityContext()->getFeaturePolicy();
438 } 427 }
439 frame()->securityContext()->setFeaturePolicyFromHeader(parsedHeader, 428 frame()->securityContext()->setFeaturePolicyFromHeader(parsedHeader,
440 parentFeaturePolicy); 429 parentFeaturePolicy);
441 } 430 }
442 } 431 }
443 432
444 void WebRemoteFrameImpl::addReplicatedContentSecurityPolicyHeader( 433 void WebRemoteFrameImpl::addReplicatedContentSecurityPolicyHeader(
445 const WebString& headerValue, 434 const WebString& headerValue,
446 WebContentSecurityPolicyType type, 435 WebContentSecurityPolicyType type,
447 WebContentSecurityPolicySource source) const { 436 WebContentSecurityPolicySource source) {
448 frame()->securityContext()->contentSecurityPolicy()->addPolicyFromHeaderValue( 437 frame()->securityContext()->contentSecurityPolicy()->addPolicyFromHeaderValue(
449 headerValue, static_cast<ContentSecurityPolicyHeaderType>(type), 438 headerValue, static_cast<ContentSecurityPolicyHeaderType>(type),
450 static_cast<ContentSecurityPolicyHeaderSource>(source)); 439 static_cast<ContentSecurityPolicyHeaderSource>(source));
451 } 440 }
452 441
453 void WebRemoteFrameImpl::resetReplicatedContentSecurityPolicy() const { 442 void WebRemoteFrameImpl::resetReplicatedContentSecurityPolicy() {
454 frame()->securityContext()->resetReplicatedContentSecurityPolicy(); 443 frame()->securityContext()->resetReplicatedContentSecurityPolicy();
455 } 444 }
456 445
457 void WebRemoteFrameImpl::setReplicatedInsecureRequestPolicy( 446 void WebRemoteFrameImpl::setReplicatedInsecureRequestPolicy(
458 WebInsecureRequestPolicy policy) const { 447 WebInsecureRequestPolicy policy) {
459 DCHECK(frame()); 448 DCHECK(frame());
460 frame()->securityContext()->setInsecureRequestPolicy(policy); 449 frame()->securityContext()->setInsecureRequestPolicy(policy);
461 } 450 }
462 451
463 void WebRemoteFrameImpl::setReplicatedPotentiallyTrustworthyUniqueOrigin( 452 void WebRemoteFrameImpl::setReplicatedPotentiallyTrustworthyUniqueOrigin(
464 bool isUniqueOriginPotentiallyTrustworthy) const { 453 bool isUniqueOriginPotentiallyTrustworthy) {
465 DCHECK(frame()); 454 DCHECK(frame());
466 // If |isUniqueOriginPotentiallyTrustworthy| is true, then the origin must be 455 // If |isUniqueOriginPotentiallyTrustworthy| is true, then the origin must be
467 // unique. 456 // unique.
468 DCHECK(!isUniqueOriginPotentiallyTrustworthy || 457 DCHECK(!isUniqueOriginPotentiallyTrustworthy ||
469 frame()->securityContext()->getSecurityOrigin()->isUnique()); 458 frame()->securityContext()->getSecurityOrigin()->isUnique());
470 frame() 459 frame()
471 ->securityContext() 460 ->securityContext()
472 ->getSecurityOrigin() 461 ->getSecurityOrigin()
473 ->setUniqueOriginIsPotentiallyTrustworthy( 462 ->setUniqueOriginIsPotentiallyTrustworthy(
474 isUniqueOriginPotentiallyTrustworthy); 463 isUniqueOriginPotentiallyTrustworthy);
475 } 464 }
476 465
477 void WebRemoteFrameImpl::dispatchLoadEventOnFrameOwner() const { 466 void WebRemoteFrameImpl::dispatchLoadEventOnFrameOwner() {
478 DCHECK(frame()->owner()->isLocal()); 467 DCHECK(frame()->owner()->isLocal());
479 frame()->owner()->dispatchLoad(); 468 frame()->owner()->dispatchLoad();
480 } 469 }
481 470
482 void WebRemoteFrameImpl::didStartLoading() { 471 void WebRemoteFrameImpl::didStartLoading() {
483 frame()->setIsLoading(true); 472 frame()->setIsLoading(true);
484 } 473 }
485 474
486 void WebRemoteFrameImpl::didStopLoading() { 475 void WebRemoteFrameImpl::didStopLoading() {
487 frame()->setIsLoading(false); 476 frame()->setIsLoading(false);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 } 519 }
531 520
532 WebRemoteFrameImpl::WebRemoteFrameImpl(WebTreeScopeType scope, 521 WebRemoteFrameImpl::WebRemoteFrameImpl(WebTreeScopeType scope,
533 WebRemoteFrameClient* client) 522 WebRemoteFrameClient* client)
534 : WebRemoteFrame(scope), 523 : WebRemoteFrame(scope),
535 m_frameClient(RemoteFrameClientImpl::create(this)), 524 m_frameClient(RemoteFrameClientImpl::create(this)),
536 m_client(client), 525 m_client(client),
537 m_selfKeepAlive(this) {} 526 m_selfKeepAlive(this) {}
538 527
539 } // namespace blink 528 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698