| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 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 are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 SecurityOrigin::create(KURL(ParsedURLString, "http://localhost")); | 158 SecurityOrigin::create(KURL(ParsedURLString, "http://localhost")); |
| 159 origin.release(); | 159 origin.release(); |
| 160 } | 160 } |
| 161 } | 161 } |
| 162 | 162 |
| 163 WebSharedWorkerImpl::WebSharedWorkerImpl(WebSharedWorkerClient* client) | 163 WebSharedWorkerImpl::WebSharedWorkerImpl(WebSharedWorkerClient* client) |
| 164 : m_webView(0) | 164 : m_webView(0) |
| 165 , m_mainFrame(0) | 165 , m_mainFrame(0) |
| 166 , m_askedToTerminate(false) | 166 , m_askedToTerminate(false) |
| 167 , m_workerInspectorProxy(WorkerInspectorProxy::create()) | 167 , m_workerInspectorProxy(WorkerInspectorProxy::create()) |
| 168 , m_client(WeakReference<WebSharedWorkerClient>::create(client)) | 168 , m_client(client) |
| 169 , m_clientWeakPtr(WeakPtr<WebSharedWorkerClient>(m_client)) | |
| 170 , m_pauseWorkerContextOnStart(false) | 169 , m_pauseWorkerContextOnStart(false) |
| 171 , m_isPausedOnStart(false) | 170 , m_isPausedOnStart(false) |
| 172 { | 171 { |
| 173 initializeWebKitStaticValues(); | 172 initializeWebKitStaticValues(); |
| 174 } | 173 } |
| 175 | 174 |
| 176 WebSharedWorkerImpl::~WebSharedWorkerImpl() | 175 WebSharedWorkerImpl::~WebSharedWorkerImpl() |
| 177 { | 176 { |
| 178 ASSERT(m_webView); | 177 ASSERT(m_webView); |
| 179 // Detach the client before closing the view to avoid getting called back. | 178 // Detach the client before closing the view to avoid getting called back. |
| 180 m_mainFrame->setClient(0); | 179 m_mainFrame->setClient(0); |
| 181 | 180 |
| 182 m_webView->close(); | 181 m_webView->close(); |
| 183 m_mainFrame->close(); | 182 m_mainFrame->close(); |
| 184 if (m_loaderProxy) | 183 if (m_loaderProxy) |
| 185 m_loaderProxy->detachProvider(this); | 184 m_loaderProxy->detachProvider(this); |
| 186 } | 185 } |
| 187 | 186 |
| 188 void WebSharedWorkerImpl::terminateWorkerThread() | 187 void WebSharedWorkerImpl::terminateWorkerThread() |
| 189 { | 188 { |
| 190 if (m_askedToTerminate) | 189 if (m_askedToTerminate) |
| 191 return; | 190 return; |
| 192 m_askedToTerminate = true; | 191 m_askedToTerminate = true; |
| 193 if (m_mainScriptLoader) { | 192 if (m_mainScriptLoader) { |
| 194 m_mainScriptLoader->cancel(); | 193 m_mainScriptLoader->cancel(); |
| 195 m_mainScriptLoader.clear(); | 194 m_mainScriptLoader.clear(); |
| 196 if (client()) | 195 m_client->workerScriptLoadFailed(); |
| 197 client()->workerScriptLoadFailed(); | |
| 198 delete this; | 196 delete this; |
| 199 return; | 197 return; |
| 200 } | 198 } |
| 201 if (m_workerThread) | 199 if (m_workerThread) |
| 202 m_workerThread->terminate(); | 200 m_workerThread->terminate(); |
| 203 m_workerInspectorProxy->workerThreadTerminated(); | 201 m_workerInspectorProxy->workerThreadTerminated(); |
| 204 } | 202 } |
| 205 | 203 |
| 206 void WebSharedWorkerImpl::initializeLoader() | 204 void WebSharedWorkerImpl::initializeLoader() |
| 207 { | 205 { |
| 208 // Create 'shadow page'. This page is never displayed, it is used to proxy t
he | 206 // Create 'shadow page'. This page is never displayed, it is used to proxy t
he |
| 209 // loading requests from the worker context to the rest of WebKit and Chromi
um | 207 // loading requests from the worker context to the rest of WebKit and Chromi
um |
| 210 // infrastructure. | 208 // infrastructure. |
| 211 ASSERT(!m_webView); | 209 ASSERT(!m_webView); |
| 212 m_webView = WebView::create(0); | 210 m_webView = WebView::create(0); |
| 213 // FIXME: http://crbug.com/363843. This needs to find a better way to | 211 // FIXME: http://crbug.com/363843. This needs to find a better way to |
| 214 // not create graphics layers. | 212 // not create graphics layers. |
| 215 m_webView->settings()->setAcceleratedCompositingEnabled(false); | 213 m_webView->settings()->setAcceleratedCompositingEnabled(false); |
| 216 // FIXME: Settings information should be passed to the Worker process from B
rowser process when the worker | 214 // FIXME: Settings information should be passed to the Worker process from B
rowser process when the worker |
| 217 // is created (similar to RenderThread::OnCreateNewView). | 215 // is created (similar to RenderThread::OnCreateNewView). |
| 218 m_mainFrame = toWebLocalFrameImpl(WebLocalFrame::create(WebTreeScopeType::Do
cument, this)); | 216 m_mainFrame = toWebLocalFrameImpl(WebLocalFrame::create(WebTreeScopeType::Do
cument, this)); |
| 219 m_webView->setMainFrame(m_mainFrame); | 217 m_webView->setMainFrame(m_mainFrame); |
| 220 m_mainFrame->setDevToolsAgentClient(this); | 218 m_mainFrame->setDevToolsAgentClient(this); |
| 221 | 219 |
| 222 // If we were asked to pause worker context on start and wait for debugger t
hen it is the good time to do that. | 220 // If we were asked to pause worker context on start and wait for debugger t
hen it is the good time to do that. |
| 223 client()->workerReadyForInspection(); | 221 m_client->workerReadyForInspection(); |
| 224 if (m_pauseWorkerContextOnStart) { | 222 if (m_pauseWorkerContextOnStart) { |
| 225 m_isPausedOnStart = true; | 223 m_isPausedOnStart = true; |
| 226 return; | 224 return; |
| 227 } | 225 } |
| 228 loadShadowPage(); | 226 loadShadowPage(); |
| 229 } | 227 } |
| 230 | 228 |
| 231 WebApplicationCacheHost* WebSharedWorkerImpl::createApplicationCacheHost(WebLoca
lFrame*, WebApplicationCacheHostClient* appcacheHostClient) | 229 WebApplicationCacheHost* WebSharedWorkerImpl::createApplicationCacheHost(WebLoca
lFrame*, WebApplicationCacheHostClient* appcacheHostClient) |
| 232 { | 230 { |
| 233 if (client()) | 231 return m_client->createApplicationCacheHost(appcacheHostClient); |
| 234 return client()->createApplicationCacheHost(appcacheHostClient); | |
| 235 return 0; | |
| 236 } | 232 } |
| 237 | 233 |
| 238 void WebSharedWorkerImpl::loadShadowPage() | 234 void WebSharedWorkerImpl::loadShadowPage() |
| 239 { | 235 { |
| 240 // Construct substitute data source for the 'shadow page'. We only need it | 236 // Construct substitute data source for the 'shadow page'. We only need it |
| 241 // to have same origin as the worker so the loading checks work correctly. | 237 // to have same origin as the worker so the loading checks work correctly. |
| 242 CString content(""); | 238 CString content(""); |
| 243 RefPtr<SharedBuffer> buffer(SharedBuffer::create(content.data(), content.len
gth())); | 239 RefPtr<SharedBuffer> buffer(SharedBuffer::create(content.data(), content.len
gth())); |
| 244 m_mainFrame->frame()->loader().load(FrameLoadRequest(0, ResourceRequest(m_ur
l), SubstituteData(buffer, "text/html", "UTF-8", KURL()))); | 240 m_mainFrame->frame()->loader().load(FrameLoadRequest(0, ResourceRequest(m_ur
l), SubstituteData(buffer, "text/html", "UTF-8", KURL()))); |
| 245 } | 241 } |
| 246 | 242 |
| 247 void WebSharedWorkerImpl::willSendRequest( | 243 void WebSharedWorkerImpl::willSendRequest( |
| 248 WebLocalFrame* frame, unsigned, WebURLRequest& request, | 244 WebLocalFrame* frame, unsigned, WebURLRequest& request, |
| 249 const WebURLResponse& redirectResponse) | 245 const WebURLResponse& redirectResponse) |
| 250 { | 246 { |
| 251 if (m_networkProvider) | 247 if (m_networkProvider) |
| 252 m_networkProvider->willSendRequest(frame->dataSource(), request); | 248 m_networkProvider->willSendRequest(frame->dataSource(), request); |
| 253 } | 249 } |
| 254 | 250 |
| 255 void WebSharedWorkerImpl::didFinishDocumentLoad(WebLocalFrame* frame) | 251 void WebSharedWorkerImpl::didFinishDocumentLoad(WebLocalFrame* frame) |
| 256 { | 252 { |
| 257 ASSERT(!m_loadingDocument); | 253 ASSERT(!m_loadingDocument); |
| 258 ASSERT(!m_mainScriptLoader); | 254 ASSERT(!m_mainScriptLoader); |
| 259 m_networkProvider = adoptPtr(client()->createServiceWorkerNetworkProvider(fr
ame->dataSource())); | 255 m_networkProvider = adoptPtr(m_client->createServiceWorkerNetworkProvider(fr
ame->dataSource())); |
| 260 m_mainScriptLoader = Loader::create(); | 256 m_mainScriptLoader = Loader::create(); |
| 261 m_loadingDocument = toWebLocalFrameImpl(frame)->frame()->document(); | 257 m_loadingDocument = toWebLocalFrameImpl(frame)->frame()->document(); |
| 262 m_mainScriptLoader->load( | 258 m_mainScriptLoader->load( |
| 263 m_loadingDocument.get(), | 259 m_loadingDocument.get(), |
| 264 m_url, | 260 m_url, |
| 265 bind(&WebSharedWorkerImpl::didReceiveScriptLoaderResponse, this), | 261 bind(&WebSharedWorkerImpl::didReceiveScriptLoaderResponse, this), |
| 266 bind(&WebSharedWorkerImpl::onScriptLoaderFinished, this)); | 262 bind(&WebSharedWorkerImpl::onScriptLoaderFinished, this)); |
| 267 } | 263 } |
| 268 | 264 |
| 269 bool WebSharedWorkerImpl::isControlledByServiceWorker(WebDataSource& dataSource) | 265 bool WebSharedWorkerImpl::isControlledByServiceWorker(WebDataSource& dataSource) |
| 270 { | 266 { |
| 271 return m_networkProvider && m_networkProvider->isControlledByServiceWorker(d
ataSource); | 267 return m_networkProvider && m_networkProvider->isControlledByServiceWorker(d
ataSource); |
| 272 } | 268 } |
| 273 | 269 |
| 274 int64_t WebSharedWorkerImpl::serviceWorkerID(WebDataSource& dataSource) | 270 int64_t WebSharedWorkerImpl::serviceWorkerID(WebDataSource& dataSource) |
| 275 { | 271 { |
| 276 if (!m_networkProvider) | 272 if (!m_networkProvider) |
| 277 return -1; | 273 return -1; |
| 278 return m_networkProvider->serviceWorkerID(dataSource); | 274 return m_networkProvider->serviceWorkerID(dataSource); |
| 279 } | 275 } |
| 280 | 276 |
| 281 void WebSharedWorkerImpl::sendProtocolMessage(int callId, const WebString& messa
ge, const WebString& state) | 277 void WebSharedWorkerImpl::sendProtocolMessage(int callId, const WebString& messa
ge, const WebString& state) |
| 282 { | 278 { |
| 283 client()->sendDevToolsMessage(callId, message, state); | 279 m_client->sendDevToolsMessage(callId, message, state); |
| 284 } | 280 } |
| 285 | 281 |
| 286 void WebSharedWorkerImpl::resumeStartup() | 282 void WebSharedWorkerImpl::resumeStartup() |
| 287 { | 283 { |
| 288 bool isPausedOnStart = m_isPausedOnStart; | 284 bool isPausedOnStart = m_isPausedOnStart; |
| 289 m_isPausedOnStart = false; | 285 m_isPausedOnStart = false; |
| 290 if (isPausedOnStart) | 286 if (isPausedOnStart) |
| 291 loadShadowPage(); | 287 loadShadowPage(); |
| 292 } | 288 } |
| 293 | 289 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 317 | 313 |
| 318 } | 314 } |
| 319 | 315 |
| 320 void WebSharedWorkerImpl::workerGlobalScopeClosed() | 316 void WebSharedWorkerImpl::workerGlobalScopeClosed() |
| 321 { | 317 { |
| 322 Platform::current()->mainThread()->postTask(FROM_HERE, threadSafeBind(&WebSh
aredWorkerImpl::workerGlobalScopeClosedOnMainThread, AllowCrossThreadAccess(this
))); | 318 Platform::current()->mainThread()->postTask(FROM_HERE, threadSafeBind(&WebSh
aredWorkerImpl::workerGlobalScopeClosedOnMainThread, AllowCrossThreadAccess(this
))); |
| 323 } | 319 } |
| 324 | 320 |
| 325 void WebSharedWorkerImpl::workerGlobalScopeClosedOnMainThread() | 321 void WebSharedWorkerImpl::workerGlobalScopeClosedOnMainThread() |
| 326 { | 322 { |
| 327 if (client()) | 323 m_client->workerContextClosed(); |
| 328 client()->workerContextClosed(); | |
| 329 | 324 |
| 330 terminateWorkerThread(); | 325 terminateWorkerThread(); |
| 331 } | 326 } |
| 332 | 327 |
| 333 void WebSharedWorkerImpl::workerGlobalScopeStarted(WorkerGlobalScope*) | 328 void WebSharedWorkerImpl::workerGlobalScopeStarted(WorkerGlobalScope*) |
| 334 { | 329 { |
| 335 } | 330 } |
| 336 | 331 |
| 337 void WebSharedWorkerImpl::workerThreadTerminated() | 332 void WebSharedWorkerImpl::workerThreadTerminated() |
| 338 { | 333 { |
| 339 Platform::current()->mainThread()->postTask(FROM_HERE, threadSafeBind(&WebSh
aredWorkerImpl::workerThreadTerminatedOnMainThread, AllowCrossThreadAccess(this)
)); | 334 Platform::current()->mainThread()->postTask(FROM_HERE, threadSafeBind(&WebSh
aredWorkerImpl::workerThreadTerminatedOnMainThread, AllowCrossThreadAccess(this)
)); |
| 340 } | 335 } |
| 341 | 336 |
| 342 void WebSharedWorkerImpl::workerThreadTerminatedOnMainThread() | 337 void WebSharedWorkerImpl::workerThreadTerminatedOnMainThread() |
| 343 { | 338 { |
| 344 if (client()) | 339 m_client->workerContextDestroyed(); |
| 345 client()->workerContextDestroyed(); | |
| 346 // The lifetime of this proxy is controlled by the worker context. | 340 // The lifetime of this proxy is controlled by the worker context. |
| 347 delete this; | 341 delete this; |
| 348 } | 342 } |
| 349 | 343 |
| 350 // WorkerLoaderProxyProvider ---------------------------------------------------
-------- | 344 // WorkerLoaderProxyProvider ---------------------------------------------------
-------- |
| 351 | 345 |
| 352 void WebSharedWorkerImpl::postTaskToLoader(PassOwnPtr<ExecutionContextTask> task
) | 346 void WebSharedWorkerImpl::postTaskToLoader(PassOwnPtr<ExecutionContextTask> task
) |
| 353 { | 347 { |
| 354 m_mainFrame->frame()->document()->postTask(FROM_HERE, task); | 348 m_mainFrame->frame()->document()->postTask(FROM_HERE, task); |
| 355 } | 349 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 379 void WebSharedWorkerImpl::startWorkerContext(const WebURL& url, const WebString&
name, const WebString& contentSecurityPolicy, WebContentSecurityPolicyType poli
cyType) | 373 void WebSharedWorkerImpl::startWorkerContext(const WebURL& url, const WebString&
name, const WebString& contentSecurityPolicy, WebContentSecurityPolicyType poli
cyType) |
| 380 { | 374 { |
| 381 m_url = url; | 375 m_url = url; |
| 382 m_name = name; | 376 m_name = name; |
| 383 initializeLoader(); | 377 initializeLoader(); |
| 384 } | 378 } |
| 385 | 379 |
| 386 void WebSharedWorkerImpl::didReceiveScriptLoaderResponse() | 380 void WebSharedWorkerImpl::didReceiveScriptLoaderResponse() |
| 387 { | 381 { |
| 388 InspectorInstrumentation::didReceiveScriptResponse(m_loadingDocument.get(),
m_mainScriptLoader->identifier()); | 382 InspectorInstrumentation::didReceiveScriptResponse(m_loadingDocument.get(),
m_mainScriptLoader->identifier()); |
| 389 if (client()) | 383 m_client->selectAppCacheID(m_mainScriptLoader->appCacheID()); |
| 390 client()->selectAppCacheID(m_mainScriptLoader->appCacheID()); | |
| 391 } | 384 } |
| 392 | 385 |
| 393 void WebSharedWorkerImpl::onScriptLoaderFinished() | 386 void WebSharedWorkerImpl::onScriptLoaderFinished() |
| 394 { | 387 { |
| 395 ASSERT(m_loadingDocument); | 388 ASSERT(m_loadingDocument); |
| 396 ASSERT(m_mainScriptLoader); | 389 ASSERT(m_mainScriptLoader); |
| 397 if (m_askedToTerminate) | 390 if (m_askedToTerminate) |
| 398 return; | 391 return; |
| 399 if (m_mainScriptLoader->failed()) { | 392 if (m_mainScriptLoader->failed()) { |
| 400 m_mainScriptLoader->cancel(); | 393 m_mainScriptLoader->cancel(); |
| 401 if (client()) | 394 m_client->workerScriptLoadFailed(); |
| 402 client()->workerScriptLoadFailed(); | |
| 403 | 395 |
| 404 // The SharedWorker was unable to load the initial script, so | 396 // The SharedWorker was unable to load the initial script, so |
| 405 // shut it down right here. | 397 // shut it down right here. |
| 406 delete this; | 398 delete this; |
| 407 return; | 399 return; |
| 408 } | 400 } |
| 409 | 401 |
| 410 Document* document = m_mainFrame->frame()->document(); | 402 Document* document = m_mainFrame->frame()->document(); |
| 411 WorkerThreadStartMode startMode = DontPauseWorkerGlobalScopeOnStart; | 403 WorkerThreadStartMode startMode = DontPauseWorkerGlobalScopeOnStart; |
| 412 if (InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(document)) | 404 if (InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(document)) |
| 413 startMode = PauseWorkerGlobalScopeOnStart; | 405 startMode = PauseWorkerGlobalScopeOnStart; |
| 414 | 406 |
| 415 // FIXME: this document's origin is pristine and without any extra privilege
s. (crbug.com/254993) | 407 // FIXME: this document's origin is pristine and without any extra privilege
s. (crbug.com/254993) |
| 416 SecurityOrigin* starterOrigin = document->securityOrigin(); | 408 SecurityOrigin* starterOrigin = document->securityOrigin(); |
| 417 | 409 |
| 418 OwnPtrWillBeRawPtr<WorkerClients> workerClients = WorkerClients::create(); | 410 OwnPtrWillBeRawPtr<WorkerClients> workerClients = WorkerClients::create(); |
| 419 provideLocalFileSystemToWorker(workerClients.get(), LocalFileSystemClient::c
reate()); | 411 provideLocalFileSystemToWorker(workerClients.get(), LocalFileSystemClient::c
reate()); |
| 420 WebSecurityOrigin webSecurityOrigin(m_loadingDocument->securityOrigin()); | 412 WebSecurityOrigin webSecurityOrigin(m_loadingDocument->securityOrigin()); |
| 421 provideContentSettingsClientToWorker(workerClients.get(), adoptPtr(client()-
>createWorkerContentSettingsClientProxy(webSecurityOrigin))); | 413 provideContentSettingsClientToWorker(workerClients.get(), adoptPtr(m_client-
>createWorkerContentSettingsClientProxy(webSecurityOrigin))); |
| 422 OwnPtr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::creat
e(m_url, m_loadingDocument->userAgent(m_url), m_mainScriptLoader->script(), null
ptr, startMode, m_mainScriptLoader->contentSecurityPolicy()->headers(), starterO
rigin, workerClients.release()); | 414 OwnPtr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::creat
e(m_url, m_loadingDocument->userAgent(m_url), m_mainScriptLoader->script(), null
ptr, startMode, m_mainScriptLoader->contentSecurityPolicy()->headers(), starterO
rigin, workerClients.release()); |
| 423 m_loaderProxy = WorkerLoaderProxy::create(this); | 415 m_loaderProxy = WorkerLoaderProxy::create(this); |
| 424 setWorkerThread(SharedWorkerThread::create(m_name, m_loaderProxy, *this)); | 416 setWorkerThread(SharedWorkerThread::create(m_name, m_loaderProxy, *this)); |
| 425 InspectorInstrumentation::scriptImported(m_loadingDocument.get(), m_mainScri
ptLoader->identifier(), m_mainScriptLoader->script()); | 417 InspectorInstrumentation::scriptImported(m_loadingDocument.get(), m_mainScri
ptLoader->identifier(), m_mainScriptLoader->script()); |
| 426 m_mainScriptLoader.clear(); | 418 m_mainScriptLoader.clear(); |
| 427 | 419 |
| 428 workerThread()->start(startupData.release()); | 420 workerThread()->start(startupData.release()); |
| 429 m_workerInspectorProxy->workerThreadCreated(m_loadingDocument.get(), workerT
hread(), m_url); | 421 m_workerInspectorProxy->workerThreadCreated(m_loadingDocument.get(), workerT
hread(), m_url); |
| 430 if (client()) | 422 m_client->workerScriptLoaded(); |
| 431 client()->workerScriptLoaded(); | |
| 432 } | 423 } |
| 433 | 424 |
| 434 void WebSharedWorkerImpl::terminateWorkerContext() | 425 void WebSharedWorkerImpl::terminateWorkerContext() |
| 435 { | 426 { |
| 436 terminateWorkerThread(); | 427 terminateWorkerThread(); |
| 437 } | 428 } |
| 438 | 429 |
| 439 void WebSharedWorkerImpl::clientDestroyed() | |
| 440 { | |
| 441 m_client.clear(); | |
| 442 } | |
| 443 | |
| 444 void WebSharedWorkerImpl::pauseWorkerContextOnStart() | 430 void WebSharedWorkerImpl::pauseWorkerContextOnStart() |
| 445 { | 431 { |
| 446 m_pauseWorkerContextOnStart = true; | 432 m_pauseWorkerContextOnStart = true; |
| 447 } | 433 } |
| 448 | 434 |
| 449 void WebSharedWorkerImpl::attachDevTools(const WebString& hostId) | 435 void WebSharedWorkerImpl::attachDevTools(const WebString& hostId) |
| 450 { | 436 { |
| 451 WebDevToolsAgent* devtoolsAgent = m_mainFrame->devToolsAgent(); | 437 WebDevToolsAgent* devtoolsAgent = m_mainFrame->devToolsAgent(); |
| 452 if (devtoolsAgent) | 438 if (devtoolsAgent) |
| 453 devtoolsAgent->attach(hostId); | 439 devtoolsAgent->attach(hostId); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 476 if (devtoolsAgent) | 462 if (devtoolsAgent) |
| 477 devtoolsAgent->dispatchOnInspectorBackend(message); | 463 devtoolsAgent->dispatchOnInspectorBackend(message); |
| 478 } | 464 } |
| 479 | 465 |
| 480 WebSharedWorker* WebSharedWorker::create(WebSharedWorkerClient* client) | 466 WebSharedWorker* WebSharedWorker::create(WebSharedWorkerClient* client) |
| 481 { | 467 { |
| 482 return new WebSharedWorkerImpl(client); | 468 return new WebSharedWorkerImpl(client); |
| 483 } | 469 } |
| 484 | 470 |
| 485 } // namespace blink | 471 } // namespace blink |
| OLD | NEW |