| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
| 3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
| 4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
| 5 * 2000 Simon Hausmann <hausmann@kde.org> | 5 * 2000 Simon Hausmann <hausmann@kde.org> |
| 6 * 2000 Stefan Schimanski <1Stein@gmx.de> | 6 * 2000 Stefan Schimanski <1Stein@gmx.de> |
| 7 * 2001 George Staikos <staikos@kde.org> | 7 * 2001 George Staikos <staikos@kde.org> |
| 8 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All | 8 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All |
| 9 * rights reserved. | 9 * rights reserved. |
| 10 * Copyright (C) 2005 Alexey Proskuryakov <ap@nypop.com> | 10 * Copyright (C) 2005 Alexey Proskuryakov <ap@nypop.com> |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 targetFrame == tree().top()) { | 185 targetFrame == tree().top()) { |
| 186 DEFINE_STATIC_LOCAL(EnumerationHistogram, framebustHistogram, | 186 DEFINE_STATIC_LOCAL(EnumerationHistogram, framebustHistogram, |
| 187 ("WebCore.Framebust", 4)); | 187 ("WebCore.Framebust", 4)); |
| 188 const unsigned userGestureBit = 0x1; | 188 const unsigned userGestureBit = 0x1; |
| 189 const unsigned allowedBit = 0x2; | 189 const unsigned allowedBit = 0x2; |
| 190 unsigned framebustParams = 0; | 190 unsigned framebustParams = 0; |
| 191 UseCounter::count(&targetFrame, UseCounter::TopNavigationFromSubFrame); | 191 UseCounter::count(&targetFrame, UseCounter::TopNavigationFromSubFrame); |
| 192 | 192 |
| 193 if (hasUserGesture) | 193 if (hasUserGesture) |
| 194 framebustParams |= userGestureBit; | 194 framebustParams |= userGestureBit; |
| 195 if (isAllowedNavigation) |
| 196 framebustParams |= allowedBit; |
| 197 framebustHistogram.count(framebustParams); |
| 198 |
| 195 if (sandboxed) { // Sandboxed with 'allow-top-navigation'. | 199 if (sandboxed) { // Sandboxed with 'allow-top-navigation'. |
| 196 UseCounter::count(&targetFrame, UseCounter::TopNavInSandboxWithPerm); | 200 UseCounter::count(&targetFrame, UseCounter::TopNavInSandboxWithPerm); |
| 197 if (!hasUserGesture) { | 201 if (!hasUserGesture) { |
| 198 UseCounter::count(&targetFrame, | 202 UseCounter::count(&targetFrame, |
| 199 UseCounter::TopNavInSandboxWithPermButNoGesture); | 203 UseCounter::TopNavInSandboxWithPermButNoGesture); |
| 204 String message = |
| 205 "Navigating the top-level window from a sandboxed iframe with " |
| 206 "'allow-top-navigation' will soon require that the iframe has " |
| 207 "received a user gesture. See " |
| 208 "https://www.chromestatus.com/features/5629582019395584."; |
| 209 printNavigationWarning(targetFrame, message.latin1().data()); |
| 200 } | 210 } |
| 211 return true; |
| 201 } | 212 } |
| 202 | 213 |
| 203 if (isAllowedNavigation) | |
| 204 framebustParams |= allowedBit; | |
| 205 framebustHistogram.count(framebustParams); | |
| 206 if (hasUserGesture || isAllowedNavigation) | 214 if (hasUserGesture || isAllowedNavigation) |
| 207 return true; | 215 return true; |
| 208 // Frame-busting used to be generally allowed in most situations, but may | 216 // Frame-busting used to be generally allowed in most situations, but may |
| 209 // now blocked if the document initiating the navigation has never received | 217 // now blocked if the document initiating the navigation has never received |
| 210 // a user gesture. | 218 // a user gesture. |
| 211 if (!RuntimeEnabledFeatures:: | 219 if (!RuntimeEnabledFeatures:: |
| 212 framebustingNeedsSameOriginOrUserGestureEnabled()) { | 220 framebustingNeedsSameOriginOrUserGestureEnabled()) { |
| 213 String targetFrameDescription = | 221 String message = |
| 214 targetFrame.isLocalFrame() | 222 "Navigating the top-level window from a cross-origin " |
| 215 ? "with URL '" + | 223 "iframe will soon require that the iframe has received " |
| 216 toLocalFrame(targetFrame).document()->url().getString() + | 224 "a user gesture. See " |
| 217 "'" | 225 "https://www.chromestatus.com/features/" |
| 218 : "with origin '" + | 226 "5851021045661696."; |
| 219 targetFrame.securityContext() | 227 printNavigationWarning(targetFrame, message.latin1().data()); |
| 220 ->getSecurityOrigin() | |
| 221 ->toString() + | |
| 222 "'"; | |
| 223 String message = "Frame with URL '" + | |
| 224 toLocalFrame(this)->document()->url().getString() + | |
| 225 "' attempted to navigate its top-level window " + | |
| 226 targetFrameDescription + | |
| 227 ". Navigating the top-level window from a cross-origin " | |
| 228 "iframe will soon require that the iframe has received " | |
| 229 "a user gesture. See " | |
| 230 "https://www.chromestatus.com/features/" | |
| 231 "5851021045661696."; | |
| 232 printNavigationWarning(message); | |
| 233 return true; | 228 return true; |
| 234 } | 229 } |
| 235 errorReason = | 230 errorReason = |
| 236 "The frame attempting navigation is targeting its top-level window, " | 231 "The frame attempting navigation is targeting its top-level window, " |
| 237 "but is neither same-origin with its target nor has it received a " | 232 "but is neither same-origin with its target nor has it received a " |
| 238 "user gesture. See " | 233 "user gesture. See " |
| 239 "https://www.chromestatus.com/features/5851021045661696."; | 234 "https://www.chromestatus.com/features/5851021045661696."; |
| 240 printNavigationErrorMessage(targetFrame, errorReason.latin1().data()); | 235 printNavigationErrorMessage(targetFrame, errorReason.latin1().data()); |
| 241 if (isLocalFrame()) { | 236 if (isLocalFrame()) { |
| 242 toLocalFrame(this)->navigationScheduler().schedulePageBlock( | 237 toLocalFrame(this)->navigationScheduler().schedulePageBlock( |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 | 381 |
| 387 ASSERT(page()); | 382 ASSERT(page()); |
| 388 | 383 |
| 389 if (m_owner) | 384 if (m_owner) |
| 390 m_owner->setContentFrame(*this); | 385 m_owner->setContentFrame(*this); |
| 391 else | 386 else |
| 392 page()->setMainFrame(this); | 387 page()->setMainFrame(this); |
| 393 } | 388 } |
| 394 | 389 |
| 395 } // namespace blink | 390 } // namespace blink |
| OLD | NEW |