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

Side by Side Diff: Source/core/dom/DocumentParser.cpp

Issue 535403002: introduce DocumentParserClient to receive parser stopped notification (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebase Created 6 years, 3 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
« no previous file with comments | « Source/core/dom/DocumentParser.h ('k') | Source/core/dom/DocumentParserClient.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. 2 * Copyright (C) 2010 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * 12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #include "config.h" 26 #include "config.h"
27 #include "core/dom/DocumentParser.h" 27 #include "core/dom/DocumentParser.h"
28 28
29 #include "core/dom/Document.h" 29 #include "core/dom/Document.h"
30 #include "core/dom/DocumentParserClient.h"
30 #include "core/html/parser/TextResourceDecoder.h" 31 #include "core/html/parser/TextResourceDecoder.h"
31 #include "wtf/Assertions.h" 32 #include "wtf/Assertions.h"
32 33
33 namespace blink { 34 namespace blink {
34 35
35 DocumentParser::DocumentParser(Document* document) 36 DocumentParser::DocumentParser(Document* document)
36 : m_state(ParsingState) 37 : m_state(ParsingState)
37 , m_documentWasLoadedAsPartOfNavigation(false) 38 , m_documentWasLoadedAsPartOfNavigation(false)
38 , m_document(document) 39 , m_document(document)
39 { 40 {
40 ASSERT(document); 41 ASSERT(document);
41 } 42 }
42 43
43 DocumentParser::~DocumentParser() 44 DocumentParser::~DocumentParser()
44 { 45 {
45 #if !ENABLE(OILPAN) 46 #if !ENABLE(OILPAN)
46 // Document is expected to call detach() before releasing its ref. 47 // Document is expected to call detach() before releasing its ref.
47 // This ASSERT is slightly awkward for parsers with a fragment case 48 // This ASSERT is slightly awkward for parsers with a fragment case
48 // as there is no Document to release the ref. 49 // as there is no Document to release the ref.
49 ASSERT(!m_document); 50 ASSERT(!m_document);
50 #endif 51 #endif
51 } 52 }
52 53
53 void DocumentParser::trace(Visitor* visitor) 54 void DocumentParser::trace(Visitor* visitor)
54 { 55 {
55 visitor->trace(m_document); 56 visitor->trace(m_document);
57 #if ENABLE(OILPAN)
58 visitor->trace(m_clients);
59 #endif
56 } 60 }
57 61
58 void DocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder>) 62 void DocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder>)
59 { 63 {
60 ASSERT_NOT_REACHED(); 64 ASSERT_NOT_REACHED();
61 } 65 }
62 66
63 TextResourceDecoder* DocumentParser::decoder() 67 TextResourceDecoder* DocumentParser::decoder()
64 { 68 {
65 return 0; 69 return 0;
66 } 70 }
67 71
68 void DocumentParser::prepareToStopParsing() 72 void DocumentParser::prepareToStopParsing()
69 { 73 {
70 ASSERT(m_state == ParsingState); 74 ASSERT(m_state == ParsingState);
71 m_state = StoppingState; 75 m_state = StoppingState;
72 } 76 }
73 77
74 void DocumentParser::stopParsing() 78 void DocumentParser::stopParsing()
75 { 79 {
76 m_state = StoppedState; 80 m_state = StoppedState;
81
82 // Clients may be removed while in the loop. Make a snapshot for iteration.
83 WillBeHeapVector<RawPtrWillBeMember<DocumentParserClient> > clientsSnapshot;
84 copyToVector(m_clients, clientsSnapshot);
85
86 for (WillBeHeapVector<RawPtrWillBeMember<DocumentParserClient> >::const_iter ator it = clientsSnapshot.begin(), itEnd = clientsSnapshot.end(); it != itEnd; + +it) {
87 DocumentParserClient* client = *it;
88 if (!m_clients.contains(client))
89 continue;
90
91 client->notifyParserStopped();
92 }
77 } 93 }
78 94
79 void DocumentParser::detach() 95 void DocumentParser::detach()
80 { 96 {
81 m_state = DetachedState; 97 m_state = DetachedState;
82 m_document = nullptr; 98 m_document = nullptr;
83 } 99 }
84 100
85 void DocumentParser::suspendScheduledTasks() 101 void DocumentParser::suspendScheduledTasks()
86 { 102 {
87 } 103 }
88 104
89 void DocumentParser::resumeScheduledTasks() 105 void DocumentParser::resumeScheduledTasks()
90 { 106 {
91 } 107 }
92 108
109 void DocumentParser::addClient(DocumentParserClient* client)
110 {
111 m_clients.add(client);
112 }
113
114 void DocumentParser::removeClient(DocumentParserClient* client)
115 {
116 m_clients.remove(client);
117 }
118
93 }; 119 };
94 120
OLDNEW
« no previous file with comments | « Source/core/dom/DocumentParser.h ('k') | Source/core/dom/DocumentParserClient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698