17242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
27242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Use of this source code is governed by a BSD-style license that can be
37242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// found in the LICENSE file.
47242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
57242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci/**
67242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @constructor
77242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */
87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.ContentScriptProjectDecorator = function()
97242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WebInspector.targetManager.addModelListener(WebInspector.RuntimeModel, WebInspector.RuntimeModel.Events.ExecutionContextCreated, this._onContextCreated, this);
117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WebInspector.workspace.addEventListener(WebInspector.Workspace.Events.ProjectAdded, this._onProjectAdded, this);
127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci/**
157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.Project} project
167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.ExecutionContext} context
177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */
187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.ContentScriptProjectDecorator._updateProjectWithExtensionName = function(project, context)
197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (project.url().startsWith(context.origin))
217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        project.setDisplayName(context.name);
227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.ContentScriptProjectDecorator.prototype = {
257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /**
267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     * @param {!WebInspector.Event} event
277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     */
287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    _onContextCreated: function(event)
297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        var context = /** @type {!WebInspector.ExecutionContext} */(event.data);
317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        if (!context.origin || !context.name)
327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            return;
337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        var projects = WebInspector.workspace.projects();
357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        projects = projects.filter(contentProjectWithName);
367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        for (var i = 0; i < projects.length; ++i)
387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            WebInspector.ContentScriptProjectDecorator._updateProjectWithExtensionName(projects[i], context);
397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        /**
417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci         * @param {!WebInspector.Project} project
427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci         * @return {boolean}
437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci         */
447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        function contentProjectWithName(project)
457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        {
467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci           return !!project.url() && project.type() === WebInspector.projectTypes.ContentScripts;
477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        }
487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    },
497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /**
517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     * @param {!WebInspector.Event} event
527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     */
537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    _onProjectAdded: function(event)
547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        var project = /** @type {!WebInspector.Project} */(event.data);
567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        if (project.type() !== WebInspector.projectTypes.ContentScripts)
577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            return;
587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        var targets = WebInspector.targetManager.targets();
607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        var contexts = [];
617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        for (var i = 0; i < targets.length; ++i)
627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            contexts = contexts.concat(targets[i].runtimeModel.executionContexts());
637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        contexts = contexts.filter(contextWithOriginAndName);
647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        for (var i = 0; i < contexts.length; ++i)
667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            WebInspector.ContentScriptProjectDecorator._updateProjectWithExtensionName(project, contexts[i]);
677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        /**
697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci         * @param {!WebInspector.ExecutionContext} context
707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci         * @return {boolean}
717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci         */
727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        function contextWithOriginAndName(context)
737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        {
747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            return !!context.origin && !!context.name;
757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        }
767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    }
777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}