Changeset 196515 in webkit
- Timestamp:
- Feb 12, 2016 2:35:45 PM (8 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r196513 r196515 1 2016-02-12 Brian Burg <bburg@apple.com> 2 3 Web Inspector: disambiguate the various identifier and connection types in RemoteInspector 4 https://bugs.webkit.org/show_bug.cgi?id=154130 5 6 Reviewed by Joseph Pecoraro. 7 8 There are multiple identifier types: 9 - connection identifier, a string UUID for a remote debugger process. 10 - session identifier, a string UUID for a remote driver/debugger instance. 11 - page/target identifier, a number unique within a single process. 12 13 There are multiple connection types: 14 - RemoteInspectorXPCConnection, a connection from RemoteInspectorXPCConnectionor to a relay. 15 - RemoteConnectionToTarget, a class that bridges to targets' dispatch queues. 16 17 Use consistent variable and getter names so that these don't get confused and 18 so that the code is easier to read. This is especially an improvement when working 19 with multiple target types or connection types within the same function. 20 21 * inspector/remote/RemoteConnectionToTarget.h: 22 * inspector/remote/RemoteConnectionToTarget.mm: 23 Remove the member for m_identifier since we can ask the target for its target identifier 24 or use a default value via WTF::Optional. There's no reason to cache the value. 25 26 (Inspector::RemoteTargetHandleRunSourceWithInfo): 27 (Inspector::RemoteConnectionToTarget::targetIdentifier): 28 (Inspector::RemoteConnectionToTarget::destination): 29 (Inspector::RemoteConnectionToTarget::setup): 30 (Inspector::RemoteConnectionToTarget::sendMessageToFrontend): 31 Bail out if the target pointer was somehow cleared and we can't get a useful target identifier. 32 33 (Inspector::RemoteConnectionToTarget::RemoteConnectionToTarget): Deleted. 34 * inspector/remote/RemoteControllableTarget.h: 35 * inspector/remote/RemoteInspectionTarget.cpp: 36 (Inspector::RemoteInspectionTarget::pauseWaitingForAutomaticInspection): 37 (Inspector::RemoteInspectionTarget::unpauseForInitializedInspector): 38 * inspector/remote/RemoteInspector.h: 39 * inspector/remote/RemoteInspector.mm: 40 (Inspector::RemoteInspector::nextAvailableTargetIdentifier): 41 (Inspector::RemoteInspector::registerTarget): 42 (Inspector::RemoteInspector::unregisterTarget): 43 (Inspector::RemoteInspector::updateTarget): 44 (Inspector::RemoteInspector::updateAutomaticInspectionCandidate): 45 (Inspector::RemoteInspector::sendAutomaticInspectionCandidateMessage): 46 (Inspector::RemoteInspector::sendMessageToRemote): 47 (Inspector::RemoteInspector::setupFailed): 48 (Inspector::RemoteInspector::setupCompleted): 49 (Inspector::RemoteInspector::stopInternal): 50 (Inspector::RemoteInspector::setupXPCConnectionIfNeeded): 51 (Inspector::RemoteInspector::xpcConnectionFailed): 52 (Inspector::RemoteInspector::listingForInspectionTarget): 53 (Inspector::RemoteInspector::listingForAutomationTarget): 54 (Inspector::RemoteInspector::pushListingsNow): 55 (Inspector::RemoteInspector::pushListingsSoon): 56 (Inspector::RemoteInspector::updateHasActiveDebugSession): 57 (Inspector::RemoteInspector::receivedSetupMessage): 58 (Inspector::RemoteInspector::receivedDataMessage): 59 (Inspector::RemoteInspector::receivedDidCloseMessage): 60 (Inspector::RemoteInspector::receivedIndicateMessage): 61 (Inspector::RemoteInspector::receivedProxyApplicationSetupMessage): 62 (Inspector::RemoteInspector::receivedConnectionDiedMessage): 63 (Inspector::RemoteInspector::receivedAutomaticInspectionRejectMessage): 64 (Inspector::RemoteInspector::nextAvailableIdentifier): Deleted. 65 * inspector/remote/RemoteInspectorConstants.h: 66 1 67 2016-02-12 Benjamin Poulain <benjamin@webkit.org> 2 68 -
trunk/Source/JavaScriptCore/inspector/remote/RemoteConnectionToTarget.h
r194665 r196515 55 55 virtual void targetClosed(); 56 56 57 unsigned identifier() const { return m_identifier; }57 Optional<unsigned> targetIdentifier() const; 58 58 NSString *connectionIdentifier() const; 59 59 NSString *destination() const; … … 87 87 88 88 RemoteControllableTarget* m_target { nullptr }; 89 unsigned m_identifier { 0 };90 89 RetainPtr<NSString> m_connectionIdentifier; 91 90 RetainPtr<NSString> m_destination; -
trunk/Source/JavaScriptCore/inspector/remote/RemoteConnectionToTarget.mm
r194665 r196515 33 33 #import "RemoteInspectionTarget.h" 34 34 #import <dispatch/dispatch.h> 35 #import <wtf/Optional.h> 35 36 #import <wtf/Vector.h> 36 37 … … 93 94 static void RemoteTargetHandleRunSourceWithInfo(void* info) 94 95 { 95 RemoteConnectionToTarget *connection = static_cast<RemoteConnectionToTarget*>(info);96 RemoteConnectionToTarget *connectionToTarget = static_cast<RemoteConnectionToTarget*>(info); 96 97 97 98 RemoteTargetQueue queueCopy; 98 99 { 99 std::lock_guard<Lock> lock(connection ->queueMutex());100 queueCopy = connection ->queue();101 connection ->clearQueue();100 std::lock_guard<Lock> lock(connectionToTarget->queueMutex()); 101 queueCopy = connectionToTarget->queue(); 102 connectionToTarget->clearQueue(); 102 103 } 103 104 … … 109 110 RemoteConnectionToTarget::RemoteConnectionToTarget(RemoteControllableTarget* target, NSString *connectionIdentifier, NSString *destination) 110 111 : m_target(target) 111 , m_identifier(target->identifier())112 112 , m_connectionIdentifier(connectionIdentifier) 113 113 , m_destination(destination) … … 121 121 } 122 122 123 Optional<unsigned> RemoteConnectionToTarget::targetIdentifier() const 124 { 125 return m_target ? Optional<unsigned>(m_target->targetIdentifier()) : Nullopt; 126 } 127 128 NSString *RemoteConnectionToTarget::connectionIdentifier() const 129 { 130 return [[m_connectionIdentifier copy] autorelease]; 131 } 132 123 133 NSString *RemoteConnectionToTarget::destination() const 124 134 { 125 135 return [[m_destination copy] autorelease]; 126 }127 128 NSString *RemoteConnectionToTarget::connectionIdentifier() const129 {130 return [[m_connectionIdentifier copy] autorelease];131 136 } 132 137 … … 160 165 std::lock_guard<Lock> lock(m_targetMutex); 161 166 if (!m_target || !m_target->remoteControlAllowed()) { 162 RemoteInspector::singleton().setupFailed( m_identifier);167 RemoteInspector::singleton().setupFailed(targetIdentifier().valueOr(0)); 163 168 m_target = nullptr; 164 169 } else if (is<RemoteInspectionTarget>(m_target)) { … … 227 232 bool RemoteConnectionToTarget::sendMessageToFrontend(const String& message) 228 233 { 229 RemoteInspector::singleton().sendMessageToRemote(identifier(), message); 230 234 if (!m_target) 235 return false; 236 237 RemoteInspector::singleton().sendMessageToRemote(targetIdentifier().value(), message); 231 238 return true; 232 239 } -
trunk/Source/JavaScriptCore/inspector/remote/RemoteControllableTarget.h
r192753 r196515 47 47 virtual void disconnect(FrontendChannel*) = 0; 48 48 49 unsigned identifier() const { return m_identifier; }50 void set Identifier(unsigned identifier) { m_identifier = identifier; }49 unsigned targetIdentifier() const { return m_identifier; } 50 void setTargetIdentifier(unsigned identifier) { m_identifier = identifier; } 51 51 52 52 enum class Type { JavaScript, Web, Automation }; -
trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectionTarget.cpp
r192753 r196515 54 54 void RemoteInspectionTarget::pauseWaitingForAutomaticInspection() 55 55 { 56 ASSERT( identifier());56 ASSERT(targetIdentifier()); 57 57 ASSERT(m_allowed); 58 58 ASSERT(automaticInspectionAllowed()); 59 59 60 60 EventLoop loop; 61 while (RemoteInspector::singleton().waitingForAutomaticInspection( identifier()) && !loop.ended())61 while (RemoteInspector::singleton().waitingForAutomaticInspection(targetIdentifier()) && !loop.ended()) 62 62 loop.cycle(); 63 63 } … … 65 65 void RemoteInspectionTarget::unpauseForInitializedInspector() 66 66 { 67 RemoteInspector::singleton().setupCompleted( identifier());67 RemoteInspector::singleton().setupCompleted(targetIdentifier()); 68 68 } 69 69 -
trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.h
r194646 r196515 63 63 void unregisterTarget(RemoteControllableTarget*); 64 64 void updateTarget(RemoteControllableTarget*); 65 void sendMessageToRemote(unsigned identifier, const String& message);65 void sendMessageToRemote(unsigned targetIdentifier, const String& message); 66 66 67 67 void updateAutomaticInspectionCandidate(RemoteInspectionTarget*); 68 68 void setRemoteInspectorClient(RemoteInspector::Client*); 69 69 70 void setupFailed(unsigned identifier);71 void setupCompleted(unsigned identifier);72 bool waitingForAutomaticInspection(unsigned identifier);70 void setupFailed(unsigned targetIdentifier); 71 void setupCompleted(unsigned targetIdentifier); 72 bool waitingForAutomaticInspection(unsigned targetIdentifier); 73 73 void clientCapabilitiesDidChange() { pushListingsSoon(); } 74 74 … … 88 88 RemoteInspector(); 89 89 90 unsigned nextAvailable Identifier();90 unsigned nextAvailableTargetIdentifier(); 91 91 92 92 enum class StopSource { API, XPCMessage }; … … 128 128 129 129 HashMap<unsigned, RemoteControllableTarget*> m_targetMap; 130 HashMap<unsigned, RetainPtr<NSDictionary>> m_ listingMap;131 HashMap<unsigned, RefPtr<RemoteConnectionToTarget>> m_ connectionMap;130 HashMap<unsigned, RetainPtr<NSDictionary>> m_targetListingMap; 131 HashMap<unsigned, RefPtr<RemoteConnectionToTarget>> m_targetConnectionMap; 132 132 133 RefPtr<RemoteInspectorXPCConnection> m_ xpcConnection;133 RefPtr<RemoteInspectorXPCConnection> m_relayConnection; 134 134 135 135 RemoteInspector::Client* m_client { nullptr }; 136 136 137 137 dispatch_queue_t m_xpcQueue; 138 unsigned m_nextAvailable Identifier { 1 };138 unsigned m_nextAvailableTargetIdentifier { 1 }; 139 139 int m_notifyToken { 0 }; 140 140 bool m_enabled { false }; … … 147 147 bool m_automaticInspectionEnabled { false }; 148 148 bool m_automaticInspectionPaused { false }; 149 unsigned m_automaticInspectionCandidate Identifier { 0 };149 unsigned m_automaticInspectionCandidateTargetIdentifier { 0 }; 150 150 }; 151 151 -
trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.mm
r196454 r196515 102 102 } 103 103 104 unsigned RemoteInspector::nextAvailable Identifier()105 { 106 unsigned nextValid Identifier;104 unsigned RemoteInspector::nextAvailableTargetIdentifier() 105 { 106 unsigned nextValidTargetIdentifier; 107 107 do { 108 nextValid Identifier = m_nextAvailableIdentifier++;109 } while (!nextValid Identifier || nextValidIdentifier == std::numeric_limits<unsigned>::max() || m_targetMap.contains(nextValidIdentifier));110 return nextValid Identifier;108 nextValidTargetIdentifier = m_nextAvailableTargetIdentifier++; 109 } while (!nextValidTargetIdentifier || nextValidTargetIdentifier == std::numeric_limits<unsigned>::max() || m_targetMap.contains(nextValidTargetIdentifier)); 110 return nextValidTargetIdentifier; 111 111 } 112 112 … … 117 117 std::lock_guard<Lock> lock(m_mutex); 118 118 119 unsigned identifier = nextAvailableIdentifier();120 target->set Identifier(identifier);119 unsigned targetIdentifier = nextAvailableTargetIdentifier(); 120 target->setTargetIdentifier(targetIdentifier); 121 121 122 122 { 123 auto result = m_targetMap.set( identifier, target);123 auto result = m_targetMap.set(targetIdentifier, target); 124 124 ASSERT_UNUSED(result, result.isNewEntry); 125 125 } 126 126 127 127 // If remote control is not allowed, a null listing is returned. 128 if (RetainPtr<NSDictionary> listing = listingForTarget(*target)) {129 auto result = m_ listingMap.set(identifier, listing);128 if (RetainPtr<NSDictionary> targetListing = listingForTarget(*target)) { 129 auto result = m_targetListingMap.set(targetIdentifier, targetListing); 130 130 ASSERT_UNUSED(result, result.isNewEntry); 131 131 } … … 140 140 std::lock_guard<Lock> lock(m_mutex); 141 141 142 unsigned identifier = target->identifier();143 if (! identifier)144 return; 145 146 bool wasRemoved = m_targetMap.remove( identifier);142 unsigned targetIdentifier = target->targetIdentifier(); 143 if (!targetIdentifier) 144 return; 145 146 bool wasRemoved = m_targetMap.remove(targetIdentifier); 147 147 ASSERT_UNUSED(wasRemoved, wasRemoved); 148 148 149 149 // The listing may never have been added if remote control isn't allowed. 150 m_ listingMap.remove(identifier);151 152 if (auto connection = m_connectionMap.take(identifier))153 connection ->targetClosed();150 m_targetListingMap.remove(targetIdentifier); 151 152 if (auto connectionToTarget = m_targetConnectionMap.take(targetIdentifier)) 153 connectionToTarget->targetClosed(); 154 154 155 155 pushListingsSoon(); … … 162 162 std::lock_guard<Lock> lock(m_mutex); 163 163 164 unsigned identifier = target->identifier();165 if (! identifier)164 unsigned targetIdentifier = target->targetIdentifier(); 165 if (!targetIdentifier) 166 166 return; 167 167 168 168 { 169 auto result = m_targetMap.set( identifier, target);169 auto result = m_targetMap.set(targetIdentifier, target); 170 170 ASSERT_UNUSED(result, !result.isNewEntry); 171 171 } 172 172 173 173 // If the target has just allowed remote control, then the listing won't exist yet. 174 if (RetainPtr<NSDictionary> listing = listingForTarget(*target))175 m_ listingMap.set(identifier, listing);174 if (RetainPtr<NSDictionary> targetListing = listingForTarget(*target)) 175 m_targetListingMap.set(targetIdentifier, targetListing); 176 176 177 177 pushListingsSoon(); … … 184 184 std::lock_guard<Lock> lock(m_mutex); 185 185 186 unsigned identifier = target->identifier();187 if (! identifier)186 unsigned targetIdentifier = target->targetIdentifier(); 187 if (!targetIdentifier) 188 188 return; 189 189 190 auto result = m_targetMap.set( identifier, target);190 auto result = m_targetMap.set(targetIdentifier, target); 191 191 ASSERT_UNUSED(result, !result.isNewEntry); 192 192 193 193 // If the target has just allowed remote control, then the listing won't exist yet. 194 if (RetainPtr<NSDictionary> listing = listingForTarget(*target))195 m_ listingMap.set(identifier, listing);194 if (RetainPtr<NSDictionary> targetListing = listingForTarget(*target)) 195 m_targetListingMap.set(targetIdentifier, targetListing); 196 196 197 197 // Don't allow automatic inspection unless it is allowed or we are stopped. … … 202 202 203 203 // FIXME: We should handle multiple debuggables trying to pause at the same time on different threads. 204 // To make this work we will need to change m_automaticInspectionCandidate Identifier to be a per-thread value.204 // To make this work we will need to change m_automaticInspectionCandidateTargetIdentifier to be a per-thread value. 205 205 // Multiple attempts on the same thread should not be possible because our nested run loop is in a special RWI mode. 206 206 if (m_automaticInspectionPaused) { 207 LOG_ERROR("Skipping Automatic Inspection Candidate with pageId(%u) because we are already paused waiting for pageId(%u)", identifier, m_automaticInspectionCandidateIdentifier);207 LOG_ERROR("Skipping Automatic Inspection Candidate with pageId(%u) because we are already paused waiting for pageId(%u)", targetIdentifier, m_automaticInspectionCandidateTargetIdentifier); 208 208 pushListingsSoon(); 209 209 return; … … 211 211 212 212 m_automaticInspectionPaused = true; 213 m_automaticInspectionCandidate Identifier = identifier;213 m_automaticInspectionCandidateTargetIdentifier = targetIdentifier; 214 214 215 215 // If we are pausing before we have connected to webinspectord the candidate message will be sent as soon as the connection is established. 216 if (m_ xpcConnection) {216 if (m_relayConnection) { 217 217 pushListingsNow(); 218 218 sendAutomaticInspectionCandidateMessage(); … … 222 222 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.8 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 223 223 std::lock_guard<Lock> lock(m_mutex); 224 if (m_automaticInspectionCandidate Identifier == identifier) {225 LOG_ERROR("Skipping Automatic Inspection Candidate with pageId(%u) because we failed to receive a response in time.", m_automaticInspectionCandidate Identifier);224 if (m_automaticInspectionCandidateTargetIdentifier == targetIdentifier) { 225 LOG_ERROR("Skipping Automatic Inspection Candidate with pageId(%u) because we failed to receive a response in time.", m_automaticInspectionCandidateTargetIdentifier); 226 226 m_automaticInspectionPaused = false; 227 227 } … … 234 234 std::lock_guard<Lock> lock(m_mutex); 235 235 236 ASSERT(m_automaticInspectionCandidate Identifier);237 m_automaticInspectionCandidate Identifier = 0;236 ASSERT(m_automaticInspectionCandidateTargetIdentifier); 237 m_automaticInspectionCandidateTargetIdentifier = 0; 238 238 } 239 239 } … … 256 256 ASSERT(m_automaticInspectionEnabled); 257 257 ASSERT(m_automaticInspectionPaused); 258 ASSERT(m_automaticInspectionCandidate Identifier);259 ASSERT(m_ xpcConnection);260 261 NSDictionary *details = @{WIR PageIdentifierKey: @(m_automaticInspectionCandidateIdentifier)};262 m_ xpcConnection->sendMessage(WIRAutomaticInspectionCandidateMessage, details);263 } 264 265 void RemoteInspector::sendMessageToRemote(unsigned identifier, const String& message)266 { 267 std::lock_guard<Lock> lock(m_mutex); 268 269 if (!m_ xpcConnection)270 return; 271 272 auto connection = m_connectionMap.get(identifier);273 if (! connection)258 ASSERT(m_automaticInspectionCandidateTargetIdentifier); 259 ASSERT(m_relayConnection); 260 261 NSDictionary *details = @{WIRTargetIdentifierKey: @(m_automaticInspectionCandidateTargetIdentifier)}; 262 m_relayConnection->sendMessage(WIRAutomaticInspectionCandidateMessage, details); 263 } 264 265 void RemoteInspector::sendMessageToRemote(unsigned targetIdentifier, const String& message) 266 { 267 std::lock_guard<Lock> lock(m_mutex); 268 269 if (!m_relayConnection) 270 return; 271 272 auto targetConnection = m_targetConnectionMap.get(targetIdentifier); 273 if (!targetConnection) 274 274 return; 275 275 276 276 NSDictionary *userInfo = @{ 277 277 WIRRawDataKey: [static_cast<NSString *>(message) dataUsingEncoding:NSUTF8StringEncoding], 278 WIRConnectionIdentifierKey: connection->connectionIdentifier(),279 WIRDestinationKey: connection->destination()278 WIRConnectionIdentifierKey: targetConnection->connectionIdentifier(), 279 WIRDestinationKey: targetConnection->destination() 280 280 }; 281 281 282 m_ xpcConnection->sendMessage(WIRRawDataMessage, userInfo);283 } 284 285 void RemoteInspector::setupFailed(unsigned identifier)286 { 287 std::lock_guard<Lock> lock(m_mutex); 288 289 m_ connectionMap.remove(identifier);282 m_relayConnection->sendMessage(WIRRawDataMessage, userInfo); 283 } 284 285 void RemoteInspector::setupFailed(unsigned targetIdentifier) 286 { 287 std::lock_guard<Lock> lock(m_mutex); 288 289 m_targetConnectionMap.remove(targetIdentifier); 290 290 291 291 updateHasActiveDebugSession(); 292 292 293 if ( identifier == m_automaticInspectionCandidateIdentifier)293 if (targetIdentifier == m_automaticInspectionCandidateTargetIdentifier) 294 294 m_automaticInspectionPaused = false; 295 295 … … 297 297 } 298 298 299 void RemoteInspector::setupCompleted(unsigned identifier)300 { 301 std::lock_guard<Lock> lock(m_mutex); 302 303 if ( identifier == m_automaticInspectionCandidateIdentifier)299 void RemoteInspector::setupCompleted(unsigned targetIdentifier) 300 { 301 std::lock_guard<Lock> lock(m_mutex); 302 303 if (targetIdentifier == m_automaticInspectionCandidateTargetIdentifier) 304 304 m_automaticInspectionPaused = false; 305 305 } … … 349 349 m_pushScheduled = false; 350 350 351 for (auto connection : m_connectionMap.values())352 connection->close();353 m_ connectionMap.clear();351 for (auto targetConnection : m_targetConnectionMap.values()) 352 targetConnection->close(); 353 m_targetConnectionMap.clear(); 354 354 355 355 updateHasActiveDebugSession(); … … 357 357 m_automaticInspectionPaused = false; 358 358 359 if (m_ xpcConnection) {359 if (m_relayConnection) { 360 360 switch (source) { 361 361 case StopSource::API: 362 m_ xpcConnection->close();362 m_relayConnection->close(); 363 363 break; 364 364 case StopSource::XPCMessage: 365 m_ xpcConnection->closeFromMessage();365 m_relayConnection->closeFromMessage(); 366 366 break; 367 367 } 368 368 369 m_ xpcConnection = nullptr;369 m_relayConnection = nullptr; 370 370 } 371 371 … … 377 377 std::lock_guard<Lock> lock(m_mutex); 378 378 379 if (m_ xpcConnection)379 if (m_relayConnection) 380 380 return; 381 381 … … 384 384 return; 385 385 386 m_ xpcConnection = adoptRef(new RemoteInspectorXPCConnection(connection, m_xpcQueue, this));387 m_ xpcConnection->sendMessage(@"syn", nil); // Send a simple message to initialize the XPC connection.386 m_relayConnection = adoptRef(new RemoteInspectorXPCConnection(connection, m_xpcQueue, this)); 387 m_relayConnection->sendMessage(@"syn", nil); // Send a simple message to initialize the XPC connection. 388 388 xpc_release(connection); 389 389 390 if (m_automaticInspectionCandidate Identifier) {390 if (m_automaticInspectionCandidateTargetIdentifier) { 391 391 // We already have a debuggable waiting to be automatically inspected. 392 392 pushListingsNow(); … … 445 445 } 446 446 447 void RemoteInspector::xpcConnectionFailed(RemoteInspectorXPCConnection* connection)448 { 449 std::lock_guard<Lock> lock(m_mutex); 450 451 ASSERT( connection == m_xpcConnection);452 if ( connection != m_xpcConnection)447 void RemoteInspector::xpcConnectionFailed(RemoteInspectorXPCConnection* relayConnection) 448 { 449 std::lock_guard<Lock> lock(m_mutex); 450 451 ASSERT(relayConnection == m_relayConnection); 452 if (relayConnection != m_relayConnection) 453 453 return; 454 454 455 455 m_pushScheduled = false; 456 456 457 for (auto connection : m_connectionMap.values())458 connection->close();459 m_ connectionMap.clear();457 for (auto targetConnection : m_targetConnectionMap.values()) 458 targetConnection->close(); 459 m_targetConnectionMap.clear(); 460 460 461 461 updateHasActiveDebugSession(); … … 463 463 m_automaticInspectionPaused = false; 464 464 465 // The connection will close itself.466 m_ xpcConnection = nullptr;465 // The XPC connection will close itself. 466 m_relayConnection = nullptr; 467 467 } 468 468 … … 494 494 495 495 RetainPtr<NSMutableDictionary> listing = adoptNS([[NSMutableDictionary alloc] init]); 496 [listing setObject:@(target. identifier()) forKey:WIRPageIdentifierKey];496 [listing setObject:@(target.targetIdentifier()) forKey:WIRTargetIdentifierKey]; 497 497 498 498 switch (target.type()) { … … 511 511 } 512 512 513 if (auto* connection = m_connectionMap.get(target.identifier()))514 [listing setObject:connection ->connectionIdentifier() forKey:WIRConnectionIdentifierKey];513 if (auto* connectionToTarget = m_targetConnectionMap.get(target.targetIdentifier())) 514 [listing setObject:connectionToTarget->connectionIdentifier() forKey:WIRConnectionIdentifierKey]; 515 515 516 516 if (target.hasLocalDebugger()) … … 527 527 528 528 RetainPtr<NSMutableDictionary> listing = adoptNS([[NSMutableDictionary alloc] init]); 529 [listing setObject:@(target. identifier()) forKey:WIRPageIdentifierKey];529 [listing setObject:@(target.targetIdentifier()) forKey:WIRTargetIdentifierKey]; 530 530 [listing setObject:target.name() forKey:WIRTitleKey]; 531 531 [listing setObject:WIRTypeAutomation forKey:WIRTypeKey]; 532 532 [listing setObject:@(target.isPaired()) forKey:WIRAutomationTargetIsPairedKey]; 533 533 534 if (auto connection = m_connectionMap.get(target.identifier()))535 [listing setObject:connection ->connectionIdentifier() forKey:WIRConnectionIdentifierKey];534 if (auto connectionToTarget = m_targetConnectionMap.get(target.targetIdentifier())) 535 [listing setObject:connectionToTarget->connectionIdentifier() forKey:WIRConnectionIdentifierKey]; 536 536 537 537 return listing; … … 540 540 void RemoteInspector::pushListingsNow() 541 541 { 542 ASSERT(m_ xpcConnection);543 if (!m_ xpcConnection)542 ASSERT(m_relayConnection); 543 if (!m_relayConnection) 544 544 return; 545 545 … … 547 547 548 548 RetainPtr<NSMutableDictionary> listings = adoptNS([[NSMutableDictionary alloc] init]); 549 for (RetainPtr<NSDictionary> listing : m_ listingMap.values()) {550 NSString * identifier = [[listing.get() objectForKey:WIRPageIdentifierKey] stringValue];551 [listings setObject:listing.get() forKey: identifier];549 for (RetainPtr<NSDictionary> listing : m_targetListingMap.values()) { 550 NSString *targetIdentifierString = [[listing.get() objectForKey:WIRTargetIdentifierKey] stringValue]; 551 [listings setObject:listing.get() forKey:targetIdentifierString]; 552 552 } 553 553 … … 558 558 [message setObject:@(isAllowed) forKey:WIRRemoteAutomationEnabledKey]; 559 559 560 m_ xpcConnection->sendMessage(WIRListingMessage, message.get());560 m_relayConnection->sendMessage(WIRListingMessage, message.get()); 561 561 } 562 562 563 563 void RemoteInspector::pushListingsSoon() 564 564 { 565 if (!m_ xpcConnection)565 if (!m_relayConnection) 566 566 return; 567 567 … … 581 581 void RemoteInspector::updateHasActiveDebugSession() 582 582 { 583 bool hasActiveDebuggerSession = !m_ connectionMap.isEmpty();583 bool hasActiveDebuggerSession = !m_targetConnectionMap.isEmpty(); 584 584 if (hasActiveDebuggerSession == m_hasActiveDebugSession) 585 585 return; … … 596 596 void RemoteInspector::receivedSetupMessage(NSDictionary *userInfo) 597 597 { 598 unsigned identifier = [[userInfo objectForKey:WIRPageIdentifierKey] unsignedIntegerValue];599 if (! identifier)598 unsigned targetIdentifier = [[userInfo objectForKey:WIRTargetIdentifierKey] unsignedIntegerValue]; 599 if (!targetIdentifier) 600 600 return; 601 601 … … 608 608 return; 609 609 610 if (m_ connectionMap.contains(identifier))611 return; 612 613 auto findResult = m_targetMap.find( identifier);610 if (m_targetConnectionMap.contains(targetIdentifier)) 611 return; 612 613 auto findResult = m_targetMap.find(targetIdentifier); 614 614 if (findResult == m_targetMap.end()) 615 615 return; … … 617 617 // Attempt to create a connection. This may fail if the page already has an inspector or if it disallows inspection. 618 618 RemoteControllableTarget* target = findResult->value; 619 RefPtr<RemoteConnectionToTarget> connection = adoptRef(new RemoteConnectionToTarget(downcast<RemoteInspectionTarget>(target), connectionIdentifier, sender));619 RefPtr<RemoteConnectionToTarget> connectionToTarget = adoptRef(new RemoteConnectionToTarget(downcast<RemoteInspectionTarget>(target), connectionIdentifier, sender)); 620 620 621 621 if (is<RemoteInspectionTarget>(target)) { 622 bool isAutomaticInspection = m_automaticInspectionCandidate Identifier == target->identifier();622 bool isAutomaticInspection = m_automaticInspectionCandidateTargetIdentifier == target->targetIdentifier(); 623 623 bool automaticallyPause = [[userInfo objectForKey:WIRAutomaticallyPause] boolValue]; 624 624 625 if (!connection ->setup(isAutomaticInspection, automaticallyPause)) {626 connection ->close();625 if (!connectionToTarget->setup(isAutomaticInspection, automaticallyPause)) { 626 connectionToTarget->close(); 627 627 return; 628 628 } 629 m_ connectionMap.set(identifier, connection.release());629 m_targetConnectionMap.set(targetIdentifier, connectionToTarget.release()); 630 630 updateHasActiveDebugSession(); 631 631 } else if (is<RemoteAutomationTarget>(target)) { 632 if (!connection ->setup()) {633 connection ->close();632 if (!connectionToTarget->setup()) { 633 connectionToTarget->close(); 634 634 return; 635 635 } 636 m_ connectionMap.set(identifier, connection.release());636 m_targetConnectionMap.set(targetIdentifier, connectionToTarget.release()); 637 637 updateHasActiveDebugSession(); 638 638 } else … … 644 644 void RemoteInspector::receivedDataMessage(NSDictionary *userInfo) 645 645 { 646 unsigned identifier = [[userInfo objectForKey:WIRPageIdentifierKey] unsignedIntegerValue];647 if (! identifier)648 return; 649 650 auto connection = m_connectionMap.get(identifier);651 if (!connection )646 unsigned targetIdentifier = [[userInfo objectForKey:WIRTargetIdentifierKey] unsignedIntegerValue]; 647 if (!targetIdentifier) 648 return; 649 650 auto connectionToTarget = m_targetConnectionMap.get(targetIdentifier); 651 if (!connectionToTarget) 652 652 return; 653 653 654 654 NSData *data = [userInfo objectForKey:WIRSocketDataKey]; 655 655 RetainPtr<NSString> message = adoptNS([[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); 656 connection ->sendMessageToTarget(message.get());656 connectionToTarget->sendMessageToTarget(message.get()); 657 657 } 658 658 659 659 void RemoteInspector::receivedDidCloseMessage(NSDictionary *userInfo) 660 660 { 661 unsigned identifier = [[userInfo objectForKey:WIRPageIdentifierKey] unsignedIntegerValue];662 if (! identifier)661 unsigned targetIdentifier = [[userInfo objectForKey:WIRTargetIdentifierKey] unsignedIntegerValue]; 662 if (!targetIdentifier) 663 663 return; 664 664 … … 667 667 return; 668 668 669 auto connection = m_connectionMap.get(identifier);670 if (!connection )671 return; 672 673 if (![connectionIdentifier isEqualToString:connection ->connectionIdentifier()])674 return; 675 676 connection ->close();677 m_ connectionMap.remove(identifier);669 auto connectionToTarget = m_targetConnectionMap.get(targetIdentifier); 670 if (!connectionToTarget) 671 return; 672 673 if (![connectionIdentifier isEqualToString:connectionToTarget->connectionIdentifier()]) 674 return; 675 676 connectionToTarget->close(); 677 m_targetConnectionMap.remove(targetIdentifier); 678 678 679 679 updateHasActiveDebugSession(); … … 689 689 void RemoteInspector::receivedIndicateMessage(NSDictionary *userInfo) 690 690 { 691 unsigned identifier = [[userInfo objectForKey:WIR PageIdentifierKey] unsignedIntegerValue];691 unsigned identifier = [[userInfo objectForKey:WIRTargetIdentifierKey] unsignedIntegerValue]; 692 692 if (!identifier) 693 693 return; … … 713 713 void RemoteInspector::receivedProxyApplicationSetupMessage(NSDictionary *) 714 714 { 715 ASSERT(m_ xpcConnection);716 if (!m_ xpcConnection)715 ASSERT(m_relayConnection); 716 if (!m_relayConnection) 717 717 return; 718 718 … … 731 731 m_shouldSendParentProcessInformation = false; 732 732 733 m_ xpcConnection->sendMessage(WIRProxyApplicationSetupResponseMessage, @{733 m_relayConnection->sendMessage(WIRProxyApplicationSetupResponseMessage, @{ 734 734 WIRProxyApplicationParentPIDKey: @(m_parentProcessIdentifier), 735 735 WIRProxyApplicationParentAuditDataKey: (NSData *)m_parentProcessAuditData.get(), … … 743 743 return; 744 744 745 auto it = m_ connectionMap.begin();746 auto end = m_ connectionMap.end();745 auto it = m_targetConnectionMap.begin(); 746 auto end = m_targetConnectionMap.end(); 747 747 for (; it != end; ++it) { 748 748 if ([connectionIdentifier isEqualToString:it->value->connectionIdentifier()]) … … 755 755 auto connection = it->value; 756 756 connection->close(); 757 m_ connectionMap.remove(it);757 m_targetConnectionMap.remove(it); 758 758 759 759 updateHasActiveDebugSession(); … … 770 770 void RemoteInspector::receivedAutomaticInspectionRejectMessage(NSDictionary *userInfo) 771 771 { 772 unsigned rejectionIdentifier = [[userInfo objectForKey:WIR PageIdentifierKey] unsignedIntValue];773 774 ASSERT(rejectionIdentifier == m_automaticInspectionCandidate Identifier);775 if (rejectionIdentifier == m_automaticInspectionCandidate Identifier)772 unsigned rejectionIdentifier = [[userInfo objectForKey:WIRTargetIdentifierKey] unsignedIntValue]; 773 774 ASSERT(rejectionIdentifier == m_automaticInspectionCandidateTargetIdentifier); 775 if (rejectionIdentifier == m_automaticInspectionCandidateTargetIdentifier) 776 776 m_automaticInspectionPaused = false; 777 777 } -
trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorConstants.h
r196454 r196515 49 49 #define WIRHostApplicationNameKey @"WIRHostApplicationNameKey" 50 50 #define WIRConnectionIdentifierKey @"WIRConnectionIdentifierKey" 51 #define WIRPageIdentifierKey @"WIRPageIdentifierKey" 51 // COMPATABILITY(iOS 9): The key string is intentionally mismatched to support old relays. 52 #define WIRTargetIdentifierKey @"WIRPageIdentifierKey" 52 53 #define WIRHasLocalDebuggerKey @"WIRHasLocalDebuggerKey" 53 54 #define WIRTitleKey @"WIRTitleKey"
Note: See TracChangeset
for help on using the changeset viewer.