Changeset 95289 in webkit
- Timestamp:
- Sep 16, 2011 6:30:21 AM (13 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 added
- 1 deleted
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r95287 r95289 1 2011-09-16 Andrey Kosyakov <caseq@chromium.org> 2 3 Web Inspector: [Extensions API] support extensions for remote inspector front-end 4 https://bugs.webkit.org/show_bug.cgi?id=67840 5 6 Reviewed by Pavel Feldman. 7 8 - Merge ExtensionCommon.js into ExtensionAPI.js 9 - refactor building of extension API for better reuse 10 - expose interface for extension registration 11 12 * WebCore.gypi: 13 * WebCore.vcproj/WebCore.vcproj: 14 * inspector/front-end/ExtensionAPI.js: 15 (defineCommonExtensionSymbols): 16 (buildExtensionAPIInjectedScript): 17 * inspector/front-end/ExtensionCommon.js: 18 * inspector/front-end/ExtensionServer.js: 19 (WebInspector.ExtensionServer.prototype._addExtensions): 20 (WebInspector.ExtensionServer.prototype._addExtension): 21 (WebInspector.ExtensionServer.prototype._buildExtensionAPIScript): 22 (WebInspector.ExtensionServer.prototype._onWindowMessage): 23 (WebInspector.ExtensionServer.prototype._registerExtension): 24 (WebInspector.ExtensionServer.prototype._expandResourcePath): 25 * inspector/front-end/WebKit.qrc: 26 * inspector/front-end/inspector.html: 27 1 28 2011-09-16 Ilya Tikhonovsky <loislo@chromium.org> 2 29 -
trunk/Source/WebCore/WebCore.gypi
r95245 r95289 6350 6350 'inspector/front-end/EmptyView.js', 6351 6351 'inspector/front-end/EventListenersSidebarPane.js', 6352 'inspector/front-end/ExtensionAPI.js',6353 6352 'inspector/front-end/ExtensionAuditCategory.js', 6354 'inspector/front-end/ExtensionCommon.js',6355 6353 'inspector/front-end/ExtensionPanel.js', 6356 6354 'inspector/front-end/ExtensionRegistryStub.js', … … 6456 6454 'inspector/front-end/textViewer.css', 6457 6455 '<@(webinspector_standalone_css_files)', 6456 '<@(webinspector_extension_api_files)', 6458 6457 ], 6459 6458 'webinspector_standalone_css_files': [ … … 6461 6460 'inspector/front-end/inspectorCommon.css', 6462 6461 'inspector/front-end/networkLogView.css', 6462 ], 6463 'webinspector_extension_api_files': [ 6464 'inspector/front-end/ExtensionAPI.js', 6463 6465 ], 6464 6466 'webinspector_uglifyjs_files': [ -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r95248 r95289 68934 68934 </File> 68935 68935 <File 68936 RelativePath="..\inspector\front-end\ExtensionCommon.js"68937 >68938 </File>68939 <File68940 68936 RelativePath="..\inspector\front-end\ExtensionPanel.js" 68941 68937 > -
trunk/Source/WebCore/inspector/front-end/ExtensionAPI.js
r94666 r95289 29 29 */ 30 30 31 WebInspector.injectedExtensionAPI = function(InjectedScriptHost, inspectedWindow, injectedScriptId) 32 { 31 function defineCommonExtensionSymbols(apiPrivate) 32 { 33 if (!apiPrivate.audits) 34 apiPrivate.audits = {}; 35 36 apiPrivate.audits.Severity = { 37 Info: "info", 38 Warning: "warning", 39 Severe: "severe" 40 }; 41 42 if (!apiPrivate.console) 43 apiPrivate.console = {}; 44 apiPrivate.console.Severity = { 45 Tip: "tip", 46 Debug: "debug", 47 Log: "log", 48 Warning: "warning", 49 Error: "error" 50 }; 51 } 52 53 function injectedExtensionAPI(injectedScriptId) 54 { 55 56 var apiPrivate = {}; 57 58 defineCommonExtensionSymbols(apiPrivate); 33 59 34 60 // Here and below, all constructors are private to API implementation. … … 590 616 591 617 } 618 619 function buildExtensionAPIInjectedScript(platformAPI) 620 { 621 return "(function(injectedScriptHost, inspectedWindow, injectedScriptId){ " + 622 defineCommonExtensionSymbols.toString() + ";" + 623 injectedExtensionAPI.toString() + ";" + 624 "injectedExtensionAPI(injectedScriptId);" + 625 (platformAPI || "") + 626 "})"; 627 } -
trunk/Source/WebCore/inspector/front-end/ExtensionServer.js
r94666 r95289 526 526 _addExtensions: function(extensions) 527 527 { 528 // See ExtensionAPI.js and ExtensionCommon.js for details. 529 InspectorFrontendHost.setExtensionAPI(this._buildExtensionAPIScript()); 530 for (var i = 0; i < extensions.length; ++i) 531 this._addExtension(extensions[i].startPage); 532 }, 533 534 _addExtension: function(startPage) 535 { 528 536 const urlOriginRegExp = new RegExp("([^:]+:\/\/[^/]*)\/"); // Can't use regexp literal here, MinJS chokes on it. 529 537 530 // See ExtensionAPI.js and ExtensionCommon.js for details. 531 InspectorFrontendHost.setExtensionAPI(this._buildExtensionAPIInjectedScript()); 532 for (var i = 0; i < extensions.length; ++i) { 533 var extension = extensions[i]; 534 try { 535 if (!extension.startPage) 536 return; 537 var originMatch = urlOriginRegExp.exec(extension.startPage); 538 if (!originMatch) { 539 console.error("Skipping extension with invalid URL: " + extension.startPage); 540 continue; 541 } 542 this._allowedOrigins[originMatch[1]] = true; 543 var iframe = document.createElement("iframe"); 544 iframe.src = extension.startPage; 545 iframe.style.display = "none"; 546 document.body.appendChild(iframe); 547 } catch (e) { 548 console.error("Failed to initialize extension " + extension.startPage + ":" + e); 538 try { 539 var originMatch = urlOriginRegExp.exec(startPage); 540 if (!originMatch) { 541 console.error("Skipping extension with invalid URL: " + startPage); 542 return false; 549 543 } 550 } 551 }, 552 553 _buildExtensionAPIInjectedScript: function() 554 { 555 var resourceTypes = {}; 556 var resourceTypeProperties = Object.getOwnPropertyNames(WebInspector.Resource.Type); 557 for (var i = 0; i < resourceTypeProperties.length; ++i) { 558 var propName = resourceTypeProperties[i]; 559 var propValue = WebInspector.Resource.Type[propName]; 560 if (typeof propValue === "number") 561 resourceTypes[propName] = WebInspector.Resource.Type.toString(propValue); 562 } 544 this._allowedOrigins[originMatch[1]] = true; 545 var iframe = document.createElement("iframe"); 546 iframe.src = startPage; 547 iframe.style.display = "none"; 548 document.body.appendChild(iframe); 549 } catch (e) { 550 console.error("Failed to initialize extension " + startPage + ":" + e); 551 return false; 552 } 553 return true; 554 }, 555 556 _buildExtensionAPIScript: function() 557 { 563 558 var platformAPI = WebInspector.buildPlatformExtensionAPI ? WebInspector.buildPlatformExtensionAPI() : ""; 564 return "(function(){ " + 565 "var apiPrivate = {};" + 566 "(" + WebInspector.commonExtensionSymbols.toString() + ")(apiPrivate);" + 567 "(" + WebInspector.injectedExtensionAPI.toString() + ").apply(this, arguments);" + 568 platformAPI + 569 "})"; 559 return buildExtensionAPIInjectedScript(platformAPI); 570 560 }, 571 561 572 562 _onWindowMessage: function(event) 573 563 { 574 if (event.data !== "registerExtension") 564 if (event.data === "registerExtension") 565 this._registerExtension(event.origin, event.ports[0]); 566 }, 567 568 _registerExtension: function(origin, port) 569 { 570 if (!this._allowedOrigins.hasOwnProperty(origin)) { 571 if (origin !== location.origin) // Just ignore inspector frames. 572 console.error("Ignoring unauthorized client request from " + origin); 575 573 return; 576 if (!this._allowedOrigins.hasOwnProperty(event.origin)) { 577 if (event.origin !== location.origin) // Just ignore inspector frames. 578 console.error("Ignoring unauthorized client request from " + event.origin); 579 return; 580 } 581 var port = event.ports[0]; 582 port._extensionOrigin = event.origin; 574 } 575 port._extensionOrigin = origin; 583 576 port.addEventListener("message", this._onmessage.bind(this), false); 584 577 port.start(); … … 621 614 if (!resourcePath) 622 615 return; 623 return extensionPath + escape(this._normalizePath(resourcePath));616 return extensionPath + this._normalizePath(resourcePath); 624 617 }, 625 618 … … 678 671 679 672 WebInspector.extensionServer = new WebInspector.ExtensionServer(); 673 674 WebInspector.extensionAPI = {}; 675 defineCommonExtensionSymbols(WebInspector.extensionAPI); 676 677 window.addExtension = WebInspector.extensionServer._addExtension.bind(WebInspector.extensionServer); -
trunk/Source/WebCore/inspector/front-end/WebKit.qrc
r94855 r95289 49 49 <file>ExtensionAPI.js</file> 50 50 <file>ExtensionAuditCategory.js</file> 51 <file>ExtensionCommon.js</file>52 51 <file>ExtensionPanel.js</file> 53 52 <file>ExtensionRegistryStub.js</file> -
trunk/Source/WebCore/inspector/front-end/inspector.html
r94855 r95289 118 118 <script type="text/javascript" src="ExtensionAPI.js"></script> 119 119 <script type="text/javascript" src="ExtensionAuditCategory.js"></script> 120 <script type="text/javascript" src="ExtensionCommon.js"></script>121 120 <script type="text/javascript" src="ExtensionServer.js"></script> 122 121 <script type="text/javascript" src="ExtensionPanel.js"></script> -
trunk/Source/WebKit/chromium/ChangeLog
r95287 r95289 1 2011-09-16 Andrey Kosyakov <caseq@chromium.org> 2 3 Web Inspector: [Extensions API] support extensions for remote inspector front-end 4 https://bugs.webkit.org/show_bug.cgi?id=67840 5 6 Reviewed by Pavel Feldman. 7 8 - expose extension API as a single, standalone file for easy reuse in remote extension scripts. 9 10 * WebKit.gyp: 11 * scripts/generate_devtools_extension_api.py: Added. 12 * scripts/generate_devtools_zip.py: 13 1 14 2011-09-16 Ilya Tikhonovsky <loislo@chromium.org> 2 15 -
trunk/Source/WebKit/chromium/WebKit.gyp
r95255 r95289 824 824 }, 825 825 { 826 'target_name': 'devtools_extension_api', 827 'type': 'none', 828 'actions': [{ 829 'action_name': 'devtools_html', 830 'script_name': 'scripts/generate_devtools_extension_api.py', 831 'inputs': [ 832 '<@(_script_name)', 833 '<@(webinspector_extension_api_files)', 834 ], 835 'outputs': ['<(PRODUCT_DIR)/resources/inspector/devtools_extension_api.js'], 836 'action': ['python', '<@(_script_name)', '<@(_outputs)', '<@(webinspector_extension_api_files)'], 837 }], 838 }, 839 { 826 840 'target_name': 'generate_devtools_grd', 827 841 'type': 'none', 828 842 'dependencies': [ 829 843 'devtools_html', 844 'devtools_extension_api' 830 845 ], 831 846 'conditions': [ … … 851 866 '<(PRODUCT_DIR)/resources/inspector/ScriptFormatterWorker.js', 852 867 '<(PRODUCT_DIR)/resources/inspector/devTools.css', 868 '<(PRODUCT_DIR)/resources/inspector/devtools_extension_api.js', 853 869 '<@(webinspector_standalone_css_files)', 854 870 ], … … 889 905 '<@(_script_name)', 890 906 'scripts/generate_devtools_html.py', 907 'scripts/generate_devtools_extension_api.py', 891 908 '<@(_inspector_html)', 892 909 '<@(devtools_files)', … … 896 913 '<@(webinspector_image_files)', 897 914 '<@(devtools_image_files)', 915 '<@(webinspector_extension_api_files)', 898 916 ], 899 917 'search_path': [ … … 910 928 '--devtools-files', '<@(devtools_files)', 911 929 '--workers-files', '<@(_workers_files)', 930 '--extension-api-files', '<@(webinspector_extension_api_files)', 912 931 '--search-path', '<@(_search_path)', 913 932 '--image-search-path', '<@(_image_search_path)', -
trunk/Source/WebKit/chromium/scripts/generate_devtools_zip.py
r87786 r95289 45 45 import concatenate_js_files 46 46 import generate_devtools_html 47 import generate_devtools_extension_api 47 48 48 49 49 50 class ParsedArgs: 50 def __init__(self, inspector_html, devtools_files, workers_files, 51 def __init__(self, inspector_html, devtools_files, workers_files, extension_api_files, 51 52 search_dirs, image_search_dirs, output_filename): 52 53 self.inspector_html = inspector_html 53 54 self.devtools_files = devtools_files 54 55 self.workers_files = workers_files 56 self.extension_api_files = extension_api_files 55 57 self.search_dirs = search_dirs 56 58 self.image_search_dirs = image_search_dirs … … 63 65 devtools_files_position = argv.index('--devtools-files') 64 66 workers_files_position = argv.index('--workers-files') 67 extension_api_files_position = argv.index('--extension-api-files') 65 68 search_path_position = argv.index('--search-path') 66 69 image_search_path_position = argv.index('--image-search-path') … … 68 71 69 72 devtools_files = argv[devtools_files_position + 1:workers_files_position] 70 workers_files = argv[workers_files_position + 1:search_path_position] 73 workers_files = argv[workers_files_position + 1:extension_api_files_position] 74 extension_api_files = argv[extension_api_files_position + 1:search_path_position] 71 75 search_dirs = argv[search_path_position + 1:image_search_path_position] 72 76 image_search_dirs = argv[image_search_path_position + 1:output_position] 73 77 74 return ParsedArgs(inspector_html, devtools_files, workers_files, 78 return ParsedArgs(inspector_html, devtools_files, workers_files, extension_api_files, 75 79 search_dirs, image_search_dirs, argv[output_position + 1]) 76 80 … … 86 90 zip = zipfile.ZipFile(parsed_args.output_filename, 'w', zipfile.ZIP_DEFLATED) 87 91 zip.writestr("devtools.html", devtools_html.getvalue()) 92 93 devtools_extension_api = StringIO.StringIO() 94 generate_devtools_extension_api.write_devtools_extension_api( 95 devtools_extension_api, parsed_args.extension_api_files) 96 zip.writestr("devtools_extension_api.js", devtools_extension_api.getvalue()) 88 97 89 98 css_extractor = concatenate_css_files.OrderedCSSFilesExtractor(
Note: See TracChangeset
for help on using the changeset viewer.