| OLD | NEW |
| 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 |
| (...skipping 1413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1424 WebString WebLocalFrameImpl::layerTreeAsText(bool showDebugInfo) const { | 1424 WebString WebLocalFrameImpl::layerTreeAsText(bool showDebugInfo) const { |
| 1425 if (!frame()) | 1425 if (!frame()) |
| 1426 return WebString(); | 1426 return WebString(); |
| 1427 | 1427 |
| 1428 return WebString(frame()->layerTreeAsText( | 1428 return WebString(frame()->layerTreeAsText( |
| 1429 showDebugInfo ? LayerTreeIncludesDebugInfo : LayerTreeNormal)); | 1429 showDebugInfo ? LayerTreeIncludesDebugInfo : LayerTreeNormal)); |
| 1430 } | 1430 } |
| 1431 | 1431 |
| 1432 // WebLocalFrameImpl public -------------------------------------------------- | 1432 // WebLocalFrameImpl public -------------------------------------------------- |
| 1433 | 1433 |
| 1434 WebLocalFrame* WebLocalFrame::create(WebTreeScopeType scope, | 1434 WebLocalFrame* WebLocalFrame::create( |
| 1435 WebFrameClient* client, | 1435 WebTreeScopeType scope, |
| 1436 WebFrame* opener) { | 1436 WebFrameClient* client, |
| 1437 return WebLocalFrameImpl::create(scope, client, opener); | 1437 blink::InterfaceProvider* interfaceProvider, |
| 1438 blink::InterfaceRegistry* interfaceRegistry, |
| 1439 WebFrame* opener) { |
| 1440 return WebLocalFrameImpl::create(scope, client, interfaceProvider, |
| 1441 interfaceRegistry, opener); |
| 1438 } | 1442 } |
| 1439 | 1443 |
| 1440 WebLocalFrame* WebLocalFrame::createProvisional(WebFrameClient* client, | 1444 WebLocalFrame* WebLocalFrame::createProvisional( |
| 1441 WebRemoteFrame* oldWebFrame, | 1445 WebFrameClient* client, |
| 1442 WebSandboxFlags flags) { | 1446 blink::InterfaceProvider* interfaceProvider, |
| 1443 return WebLocalFrameImpl::createProvisional(client, oldWebFrame, flags); | 1447 blink::InterfaceRegistry* interfaceRegistry, |
| 1448 WebRemoteFrame* oldWebFrame, |
| 1449 WebSandboxFlags flags) { |
| 1450 return WebLocalFrameImpl::createProvisional( |
| 1451 client, interfaceProvider, interfaceRegistry, oldWebFrame, flags); |
| 1444 } | 1452 } |
| 1445 | 1453 |
| 1446 WebLocalFrameImpl* WebLocalFrameImpl::create(WebTreeScopeType scope, | 1454 WebLocalFrameImpl* WebLocalFrameImpl::create( |
| 1447 WebFrameClient* client, | 1455 WebTreeScopeType scope, |
| 1448 WebFrame* opener) { | 1456 WebFrameClient* client, |
| 1449 WebLocalFrameImpl* frame = new WebLocalFrameImpl(scope, client); | 1457 blink::InterfaceProvider* interfaceProvider, |
| 1458 blink::InterfaceRegistry* interfaceRegistry, |
| 1459 WebFrame* opener) { |
| 1460 WebLocalFrameImpl* frame = new WebLocalFrameImpl( |
| 1461 scope, client, interfaceProvider, interfaceRegistry); |
| 1450 frame->setOpener(opener); | 1462 frame->setOpener(opener); |
| 1451 return frame; | 1463 return frame; |
| 1452 } | 1464 } |
| 1453 | 1465 |
| 1454 WebLocalFrameImpl* WebLocalFrameImpl::createProvisional( | 1466 WebLocalFrameImpl* WebLocalFrameImpl::createProvisional( |
| 1455 WebFrameClient* client, | 1467 WebFrameClient* client, |
| 1468 blink::InterfaceProvider* interfaceProvider, |
| 1469 blink::InterfaceRegistry* interfaceRegistry, |
| 1456 WebRemoteFrame* oldWebFrame, | 1470 WebRemoteFrame* oldWebFrame, |
| 1457 WebSandboxFlags flags) { | 1471 WebSandboxFlags flags) { |
| 1458 DCHECK(client); | 1472 DCHECK(client); |
| 1459 WebLocalFrameImpl* webFrame = new WebLocalFrameImpl(oldWebFrame, client); | 1473 WebLocalFrameImpl* webFrame = new WebLocalFrameImpl( |
| 1474 oldWebFrame, client, interfaceProvider, interfaceRegistry); |
| 1460 Frame* oldFrame = oldWebFrame->toImplBase()->frame(); | 1475 Frame* oldFrame = oldWebFrame->toImplBase()->frame(); |
| 1461 webFrame->setParent(oldWebFrame->parent()); | 1476 webFrame->setParent(oldWebFrame->parent()); |
| 1462 webFrame->setOpener(oldWebFrame->opener()); | 1477 webFrame->setOpener(oldWebFrame->opener()); |
| 1463 // Note: this *always* temporarily sets a frame owner, even for main frames! | 1478 // Note: this *always* temporarily sets a frame owner, even for main frames! |
| 1464 // When a core Frame is created with no owner, it attempts to set itself as | 1479 // When a core Frame is created with no owner, it attempts to set itself as |
| 1465 // the main frame of the Page. However, this is a provisional frame, and may | 1480 // the main frame of the Page. However, this is a provisional frame, and may |
| 1466 // disappear, so Page::m_mainFrame can't be updated just yet. | 1481 // disappear, so Page::m_mainFrame can't be updated just yet. |
| 1467 FrameOwner* tempOwner = DummyFrameOwner::create(); | 1482 FrameOwner* tempOwner = DummyFrameOwner::create(); |
| 1468 // TODO(dcheng): This block is very similar to initializeCoreFrame. Try to | 1483 // TODO(dcheng): This block is very similar to initializeCoreFrame. Try to |
| 1469 // reuse it here. | 1484 // reuse it here. |
| 1470 LocalFrame* frame = LocalFrame::create( | 1485 LocalFrame* frame = LocalFrame::create( |
| 1471 webFrame->m_frameLoaderClientImpl.get(), oldFrame->host(), tempOwner, | 1486 webFrame->m_frameLoaderClientImpl.get(), oldFrame->host(), tempOwner, |
| 1472 client->interfaceProvider(), client->interfaceRegistry()); | 1487 interfaceProvider, interfaceRegistry); |
| 1473 // Set the name and unique name directly, bypassing any of the normal logic | 1488 // Set the name and unique name directly, bypassing any of the normal logic |
| 1474 // to calculate unique name. | 1489 // to calculate unique name. |
| 1475 frame->tree().setPrecalculatedName( | 1490 frame->tree().setPrecalculatedName( |
| 1476 toWebRemoteFrameImpl(oldWebFrame)->frame()->tree().name(), | 1491 toWebRemoteFrameImpl(oldWebFrame)->frame()->tree().name(), |
| 1477 toWebRemoteFrameImpl(oldWebFrame)->frame()->tree().uniqueName()); | 1492 toWebRemoteFrameImpl(oldWebFrame)->frame()->tree().uniqueName()); |
| 1478 webFrame->setCoreFrame(frame); | 1493 webFrame->setCoreFrame(frame); |
| 1479 | 1494 |
| 1480 frame->setOwner(oldFrame->owner()); | 1495 frame->setOwner(oldFrame->owner()); |
| 1481 | 1496 |
| 1482 if (frame->owner() && frame->owner()->isRemote()) | 1497 if (frame->owner() && frame->owner()->isRemote()) |
| 1483 toRemoteFrameOwner(frame->owner()) | 1498 toRemoteFrameOwner(frame->owner()) |
| 1484 ->setSandboxFlags(static_cast<SandboxFlags>(flags)); | 1499 ->setSandboxFlags(static_cast<SandboxFlags>(flags)); |
| 1485 | 1500 |
| 1486 // We must call init() after m_frame is assigned because it is referenced | 1501 // We must call init() after m_frame is assigned because it is referenced |
| 1487 // during init(). Note that this may dispatch JS events; the frame may be | 1502 // during init(). Note that this may dispatch JS events; the frame may be |
| 1488 // detached after init() returns. | 1503 // detached after init() returns. |
| 1489 frame->init(); | 1504 frame->init(); |
| 1490 return webFrame; | 1505 return webFrame; |
| 1491 } | 1506 } |
| 1492 | 1507 |
| 1493 WebLocalFrameImpl::WebLocalFrameImpl(WebTreeScopeType scope, | 1508 WebLocalFrameImpl::WebLocalFrameImpl( |
| 1494 WebFrameClient* client) | 1509 WebTreeScopeType scope, |
| 1510 WebFrameClient* client, |
| 1511 blink::InterfaceProvider* interfaceProvider, |
| 1512 blink::InterfaceRegistry* interfaceRegistry) |
| 1495 : WebLocalFrame(scope), | 1513 : WebLocalFrame(scope), |
| 1496 m_frameLoaderClientImpl(FrameLoaderClientImpl::create(this)), | 1514 m_frameLoaderClientImpl(FrameLoaderClientImpl::create(this)), |
| 1497 m_frameWidget(0), | 1515 m_frameWidget(0), |
| 1498 m_client(client), | 1516 m_client(client), |
| 1499 m_autofillClient(0), | 1517 m_autofillClient(0), |
| 1500 m_contentSettingsClient(0), | 1518 m_contentSettingsClient(0), |
| 1501 m_inputEventsScaleFactorForEmulation(1), | 1519 m_inputEventsScaleFactorForEmulation(1), |
| 1520 m_interfaceProvider(interfaceProvider), |
| 1521 m_interfaceRegistry(interfaceRegistry), |
| 1502 m_webDevToolsFrontend(0), | 1522 m_webDevToolsFrontend(0), |
| 1503 m_inputMethodController(new WebInputMethodControllerImpl(this)), | 1523 m_inputMethodController(new WebInputMethodControllerImpl(this)), |
| 1504 m_selfKeepAlive(this) { | 1524 m_selfKeepAlive(this) { |
| 1505 DCHECK(m_client); | 1525 DCHECK(m_client); |
| 1506 frameCount++; | 1526 frameCount++; |
| 1507 } | 1527 } |
| 1508 | 1528 |
| 1509 WebLocalFrameImpl::WebLocalFrameImpl(WebRemoteFrame* oldWebFrame, | 1529 WebLocalFrameImpl::WebLocalFrameImpl( |
| 1510 WebFrameClient* client) | 1530 WebRemoteFrame* oldWebFrame, |
| 1531 WebFrameClient* client, |
| 1532 blink::InterfaceProvider* interfaceProvider, |
| 1533 blink::InterfaceRegistry* interfaceRegistry) |
| 1511 : WebLocalFrameImpl(oldWebFrame->inShadowTree() | 1534 : WebLocalFrameImpl(oldWebFrame->inShadowTree() |
| 1512 ? WebTreeScopeType::Shadow | 1535 ? WebTreeScopeType::Shadow |
| 1513 : WebTreeScopeType::Document, | 1536 : WebTreeScopeType::Document, |
| 1514 client) {} | 1537 client, |
| 1538 interfaceProvider, |
| 1539 interfaceRegistry) {} |
| 1515 | 1540 |
| 1516 WebLocalFrameImpl::~WebLocalFrameImpl() { | 1541 WebLocalFrameImpl::~WebLocalFrameImpl() { |
| 1517 // The widget for the frame, if any, must have already been closed. | 1542 // The widget for the frame, if any, must have already been closed. |
| 1518 DCHECK(!m_frameWidget); | 1543 DCHECK(!m_frameWidget); |
| 1519 frameCount--; | 1544 frameCount--; |
| 1520 } | 1545 } |
| 1521 | 1546 |
| 1522 DEFINE_TRACE(WebLocalFrameImpl) { | 1547 DEFINE_TRACE(WebLocalFrameImpl) { |
| 1523 visitor->trace(m_frameLoaderClientImpl); | 1548 visitor->trace(m_frameLoaderClientImpl); |
| 1524 visitor->trace(m_frame); | 1549 visitor->trace(m_frame); |
| 1525 visitor->trace(m_devToolsAgent); | 1550 visitor->trace(m_devToolsAgent); |
| 1526 visitor->trace(m_textFinder); | 1551 visitor->trace(m_textFinder); |
| 1527 visitor->trace(m_printContext); | 1552 visitor->trace(m_printContext); |
| 1528 visitor->trace(m_contextMenuNode); | 1553 visitor->trace(m_contextMenuNode); |
| 1529 visitor->template registerWeakMembers<WebFrame, &WebFrame::clearWeakFrames>( | 1554 visitor->template registerWeakMembers<WebFrame, &WebFrame::clearWeakFrames>( |
| 1530 this); | 1555 this); |
| 1531 WebFrame::traceFrames(visitor, this); | 1556 WebFrame::traceFrames(visitor, this); |
| 1532 WebFrameImplBase::trace(visitor); | 1557 WebFrameImplBase::trace(visitor); |
| 1533 } | 1558 } |
| 1534 | 1559 |
| 1535 void WebLocalFrameImpl::setCoreFrame(LocalFrame* frame) { | 1560 void WebLocalFrameImpl::setCoreFrame(LocalFrame* frame) { |
| 1536 m_frame = frame; | 1561 m_frame = frame; |
| 1537 } | 1562 } |
| 1538 | 1563 |
| 1539 void WebLocalFrameImpl::initializeCoreFrame(FrameHost* host, | 1564 void WebLocalFrameImpl::initializeCoreFrame(FrameHost* host, |
| 1540 FrameOwner* owner, | 1565 FrameOwner* owner, |
| 1541 const AtomicString& name, | 1566 const AtomicString& name, |
| 1542 const AtomicString& uniqueName) { | 1567 const AtomicString& uniqueName) { |
| 1543 setCoreFrame( | 1568 setCoreFrame(LocalFrame::create(m_frameLoaderClientImpl.get(), host, owner, |
| 1544 LocalFrame::create(m_frameLoaderClientImpl.get(), host, owner, | 1569 m_interfaceProvider, m_interfaceRegistry)); |
| 1545 client() ? client()->interfaceProvider() : nullptr, | |
| 1546 client() ? client()->interfaceRegistry() : nullptr)); | |
| 1547 frame()->tree().setPrecalculatedName(name, uniqueName); | 1570 frame()->tree().setPrecalculatedName(name, uniqueName); |
| 1548 // We must call init() after m_frame is assigned because it is referenced | 1571 // We must call init() after m_frame is assigned because it is referenced |
| 1549 // during init(). Note that this may dispatch JS events; the frame may be | 1572 // during init(). Note that this may dispatch JS events; the frame may be |
| 1550 // detached after init() returns. | 1573 // detached after init() returns. |
| 1551 frame()->init(); | 1574 frame()->init(); |
| 1552 if (frame()) { | 1575 if (frame()) { |
| 1553 if (frame()->loader().stateMachine()->isDisplayingInitialEmptyDocument() && | 1576 if (frame()->loader().stateMachine()->isDisplayingInitialEmptyDocument() && |
| 1554 !parent() && !opener() && | 1577 !parent() && !opener() && |
| 1555 frame()->settings()->getShouldReuseGlobalForUnownedMainFrame()) { | 1578 frame()->settings()->getShouldReuseGlobalForUnownedMainFrame()) { |
| 1556 frame()->document()->getSecurityOrigin()->grantUniversalAccess(); | 1579 frame()->document()->getSecurityOrigin()->grantUniversalAccess(); |
| (...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2351 ->frameScheduler() | 2374 ->frameScheduler() |
| 2352 ->unthrottledTaskRunner() | 2375 ->unthrottledTaskRunner() |
| 2353 ->toSingleThreadTaskRunner(); | 2376 ->toSingleThreadTaskRunner(); |
| 2354 } | 2377 } |
| 2355 | 2378 |
| 2356 WebInputMethodControllerImpl* WebLocalFrameImpl::inputMethodController() const { | 2379 WebInputMethodControllerImpl* WebLocalFrameImpl::inputMethodController() const { |
| 2357 return m_inputMethodController.get(); | 2380 return m_inputMethodController.get(); |
| 2358 } | 2381 } |
| 2359 | 2382 |
| 2360 } // namespace blink | 2383 } // namespace blink |
| OLD | NEW |