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

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

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

Powered by Google App Engine
This is Rietveld 408576698