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