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

Side by Side Diff: third_party/WebKit/Source/core/dom/Document.cpp

Issue 2801813005: Only show a beforeunload dialog if a frame has had a user gesture since its load. (Closed)
Patch Set: aw Created 3 years, 8 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 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All
7 * rights reserved. 7 * rights reserved.
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
(...skipping 3053 matching lines...) Expand 10 before | Expand all | Expand 10 after
3064 BeforeUnloadEvent* beforeUnloadEvent = BeforeUnloadEvent::create(); 3064 BeforeUnloadEvent* beforeUnloadEvent = BeforeUnloadEvent::create();
3065 beforeUnloadEvent->initEvent(EventTypeNames::beforeunload, false, true); 3065 beforeUnloadEvent->initEvent(EventTypeNames::beforeunload, false, true);
3066 m_loadEventProgress = BeforeUnloadEventInProgress; 3066 m_loadEventProgress = BeforeUnloadEventInProgress;
3067 m_domWindow->dispatchEvent(beforeUnloadEvent, this); 3067 m_domWindow->dispatchEvent(beforeUnloadEvent, this);
3068 m_loadEventProgress = BeforeUnloadEventCompleted; 3068 m_loadEventProgress = BeforeUnloadEventCompleted;
3069 if (!beforeUnloadEvent->defaultPrevented()) 3069 if (!beforeUnloadEvent->defaultPrevented())
3070 defaultEventHandler(beforeUnloadEvent); 3070 defaultEventHandler(beforeUnloadEvent);
3071 if (!frame() || beforeUnloadEvent->returnValue().isNull()) 3071 if (!frame() || beforeUnloadEvent->returnValue().isNull())
3072 return true; 3072 return true;
3073 3073
3074 if (!frame()->hasReceivedUserGesture()) {
Charlie Reis 2017/04/10 06:20:11 Sanity check: Does this mean the frame has receive
Avi (use Gerrit) 2017/05/05 15:30:04 This is actually about the document, not the frame
3075 addConsoleMessage(ConsoleMessage::create(
3076 JSMessageSource, ErrorMessageLevel,
3077 "Blocked attempt to show a 'beforeunload' confirmation panel for a "
3078 "frame that never had a user gesture since its load. "
3079 "https://www.chromestatus.com/feature/5082396709879808"));
3080 return true;
3081 }
3082
3074 if (didAllowNavigation) { 3083 if (didAllowNavigation) {
3075 addConsoleMessage(ConsoleMessage::create( 3084 addConsoleMessage(ConsoleMessage::create(
3076 JSMessageSource, ErrorMessageLevel, 3085 JSMessageSource, ErrorMessageLevel,
3077 "Blocked attempt to show multiple 'beforeunload' confirmation panels " 3086 "Blocked attempt to show multiple 'beforeunload' confirmation panels "
3078 "for a single navigation.")); 3087 "for a single navigation."));
3079 return true; 3088 return true;
3080 } 3089 }
3081 3090
3082 String text = beforeUnloadEvent->returnValue(); 3091 String text = beforeUnloadEvent->returnValue();
3083 if (chromeClient.openBeforeUnloadConfirmPanel(text, m_frame, isReload)) { 3092 if (chromeClient.openBeforeUnloadConfirmPanel(text, m_frame, isReload)) {
(...skipping 3567 matching lines...) Expand 10 before | Expand all | Expand 10 after
6651 } 6660 }
6652 6661
6653 void showLiveDocumentInstances() { 6662 void showLiveDocumentInstances() {
6654 WeakDocumentSet& set = liveDocumentSet(); 6663 WeakDocumentSet& set = liveDocumentSet();
6655 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 6664 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
6656 for (blink::Document* document : set) 6665 for (blink::Document* document : set)
6657 fprintf(stderr, "- Document %p URL: %s\n", document, 6666 fprintf(stderr, "- Document %p URL: %s\n", document,
6658 document->url().getString().utf8().data()); 6667 document->url().getString().utf8().data());
6659 } 6668 }
6660 #endif 6669 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698