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

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: 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 // HELPME(oilpan): Below doesn't compile
58 // visitor->trace(m_clients);
kouhei (in TOK) 2014/09/03 22:40:41 This gives me an error, but I don't know how to re
kouhei (in TOK) 2014/09/04 21:08:01 Resolved. We needed a #if ENABLE(OILPAN) here, as
56 } 59 }
57 60
58 void DocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder>) 61 void DocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder>)
59 { 62 {
60 ASSERT_NOT_REACHED(); 63 ASSERT_NOT_REACHED();
61 } 64 }
62 65
63 TextResourceDecoder* DocumentParser::decoder() 66 TextResourceDecoder* DocumentParser::decoder()
64 { 67 {
65 return 0; 68 return 0;
66 } 69 }
67 70
68 void DocumentParser::prepareToStopParsing() 71 void DocumentParser::prepareToStopParsing()
69 { 72 {
70 ASSERT(m_state == ParsingState); 73 ASSERT(m_state == ParsingState);
71 m_state = StoppingState; 74 m_state = StoppingState;
72 } 75 }
73 76
74 void DocumentParser::stopParsing() 77 void DocumentParser::stopParsing()
75 { 78 {
76 m_state = StoppedState; 79 m_state = StoppedState;
80
81 // Clients may be removed while in the loop. Make a snapshot for iteration.
82 WillBeHeapVector<RawPtrWillBeMember<DocumentParserClient> > clientsSnapshot;
83 copyToVector(m_clients, clientsSnapshot);
84
85 for (WillBeHeapVector<RawPtrWillBeMember<DocumentParserClient> >::const_iter ator it = clientsSnapshot.begin(), itEnd = clientsSnapshot.end(); it != itEnd; + +it) {
86 DocumentParserClient* client = *it;
87 if (!m_clients.contains(client))
88 continue;
89
90 client->notifyParserStopped();
91 }
77 } 92 }
78 93
79 void DocumentParser::detach() 94 void DocumentParser::detach()
80 { 95 {
81 m_state = DetachedState; 96 m_state = DetachedState;
82 m_document = nullptr; 97 m_document = nullptr;
83 } 98 }
84 99
85 void DocumentParser::suspendScheduledTasks() 100 void DocumentParser::suspendScheduledTasks()
86 { 101 {
87 } 102 }
88 103
89 void DocumentParser::resumeScheduledTasks() 104 void DocumentParser::resumeScheduledTasks()
90 { 105 {
91 } 106 }
92 107
108 void DocumentParser::addClient(DocumentParserClient* client)
109 {
110 m_clients.add(client);
111 }
112
113 void DocumentParser::removeClient(DocumentParserClient* client)
114 {
115 m_clients.remove(client);
116 }
117
93 }; 118 };
94 119
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