Index: browser/devtools/devtools_http_handler_impl.cc =================================================================== --- browser/devtools/devtools_http_handler_impl.cc (revision 228917) +++ browser/devtools/devtools_http_handler_impl.cc (working copy) @@ -542,9 +542,17 @@ DevToolsTarget* DevToolsHttpHandlerImpl::GetTarget(const std::string& id) { TargetMap::const_iterator it = target_map_.find(id); - if (it == target_map_.end()) - return NULL; - return it->second; + if (it != target_map_.end()) + return it->second; + + scoped_ptr<DevToolsTarget> target(delegate_->CreateTargetForId(id)); + if (target) { + DCHECK_EQ(id, target->GetId()); + target_map_[id] = target.release(); + return target_map_[id]; + } + + return NULL; } void DevToolsHttpHandlerImpl::OnThumbnailRequestUI( Index: public/browser/devtools_http_handler_delegate.h =================================================================== --- public/browser/devtools_http_handler_delegate.h (revision 228917) +++ public/browser/devtools_http_handler_delegate.h (working copy) @@ -39,6 +39,13 @@ // Creates new inspectable target. virtual scoped_ptr<DevToolsTarget> CreateNewTarget() = 0; + // Creates an inspectable target for the specified |id|. Called in cases where + // the target has not been enumerated (for example, direct URL access where + // the discovery JSON was not loaded first). This method was added for + // Chromium Embedded Framework. + virtual scoped_ptr<DevToolsTarget> CreateTargetForId( + const std::string& id) = 0; + typedef std::vector<DevToolsTarget*> TargetList; typedef base::Callback<void(const TargetList&)> TargetCallback;