OLD | NEW |
1 (function() { | 1 (function() { |
2 /* | 2 /* |
3 * Copyright (C) 2012 Google Inc. All rights reserved. | 3 * Copyright (C) 2012 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 { | 243 { |
244 function callbackWrapper(result) | 244 function callbackWrapper(result) |
245 { | 245 { |
246 var entries = (result && result.entries) || []; | 246 var entries = (result && result.entries) || []; |
247 for (var i = 0; i < entries.length; ++i) { | 247 for (var i = 0; i < entries.length; ++i) { |
248 entries[i].__proto__ = new Request(entries[i]._requestId); | 248 entries[i].__proto__ = new Request(entries[i]._requestId); |
249 delete entries[i]._requestId; | 249 delete entries[i]._requestId; |
250 } | 250 } |
251 callback(result); | 251 callback(result); |
252 } | 252 } |
253 return extensionServer.sendRequest({ command: commands.GetHAR }, callbac
k && callbackWrapper); | 253 extensionServer.sendRequest({ command: commands.GetHAR }, callback && ca
llbackWrapper); |
254 }, | 254 }, |
255 | 255 |
256 addRequestHeaders: function(headers) | 256 addRequestHeaders: function(headers) |
257 { | 257 { |
258 return extensionServer.sendRequest({ command: commands.AddRequestHeaders
, headers: headers, extensionId: window.location.hostname }); | 258 extensionServer.sendRequest({ command: commands.AddRequestHeaders, heade
rs: headers, extensionId: window.location.hostname }); |
259 } | 259 } |
260 } | 260 } |
261 | 261 |
262 /** | 262 /** |
263 * @constructor | 263 * @constructor |
264 */ | 264 */ |
265 function RequestImpl(id) | 265 function RequestImpl(id) |
266 { | 266 { |
267 this._id = id; | 267 this._id = id; |
268 } | 268 } |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 * @this {EventSinkImpl} | 358 * @this {EventSinkImpl} |
359 */ | 359 */ |
360 function dispatchShowEvent(message) | 360 function dispatchShowEvent(message) |
361 { | 361 { |
362 var frameIndex = message.arguments[0]; | 362 var frameIndex = message.arguments[0]; |
363 if (typeof frameIndex === "number") | 363 if (typeof frameIndex === "number") |
364 this._fire(window.parent.frames[frameIndex]); | 364 this._fire(window.parent.frames[frameIndex]); |
365 else | 365 else |
366 this._fire(); | 366 this._fire(); |
367 } | 367 } |
368 this.onShown = new EventSink(events.ViewShown + id, dispatchShowEvent); | 368 |
369 this.onHidden = new EventSink(events.ViewHidden + id); | 369 if (id) { |
| 370 this.onShown = new EventSink(events.ViewShown + id, dispatchShowEvent); |
| 371 this.onHidden = new EventSink(events.ViewHidden + id); |
| 372 } |
370 } | 373 } |
371 | 374 |
372 /** | 375 /** |
373 * @constructor | 376 * @constructor |
374 * @extends {ExtensionViewImpl} | 377 * @extends {ExtensionViewImpl} |
| 378 * @param {string} hostPanelName |
375 */ | 379 */ |
376 function PanelWithSidebarImpl(hostPanelName) | 380 function PanelWithSidebarImpl(hostPanelName) |
377 { | 381 { |
| 382 ExtensionViewImpl.call(this, null); |
378 this._hostPanelName = hostPanelName; | 383 this._hostPanelName = hostPanelName; |
379 this.onSelectionChanged = new EventSink(events.PanelObjectSelected + hostPan
elName); | 384 this.onSelectionChanged = new EventSink(events.PanelObjectSelected + hostPan
elName); |
380 } | 385 } |
381 | 386 |
382 PanelWithSidebarImpl.prototype = { | 387 PanelWithSidebarImpl.prototype = { |
383 createSidebarPane: function(title, callback) | 388 createSidebarPane: function(title, callback) |
384 { | 389 { |
385 var id = "extension-sidebar-" + extensionServer.nextObjectId(); | 390 var id = "extension-sidebar-" + extensionServer.nextObjectId(); |
386 var request = { | 391 var request = { |
387 command: commands.CreateSidebarPane, | 392 command: commands.CreateSidebarPane, |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 * @constructor | 475 * @constructor |
471 * @extends {ExtensionViewImpl} | 476 * @extends {ExtensionViewImpl} |
472 */ | 477 */ |
473 function ExtensionPanelImpl(id) | 478 function ExtensionPanelImpl(id) |
474 { | 479 { |
475 ExtensionViewImpl.call(this, id); | 480 ExtensionViewImpl.call(this, id); |
476 this.onSearch = new EventSink(events.PanelSearch + id); | 481 this.onSearch = new EventSink(events.PanelSearch + id); |
477 } | 482 } |
478 | 483 |
479 ExtensionPanelImpl.prototype = { | 484 ExtensionPanelImpl.prototype = { |
| 485 /** |
| 486 * @return {!Object} |
| 487 */ |
480 createStatusBarButton: function(iconPath, tooltipText, disabled) | 488 createStatusBarButton: function(iconPath, tooltipText, disabled) |
481 { | 489 { |
482 var id = "button-" + extensionServer.nextObjectId(); | 490 var id = "button-" + extensionServer.nextObjectId(); |
483 var request = { | 491 var request = { |
484 command: commands.CreateStatusBarButton, | 492 command: commands.CreateStatusBarButton, |
485 panel: this._id, | 493 panel: this._id, |
486 id: id, | 494 id: id, |
487 icon: iconPath, | 495 icon: iconPath, |
488 tooltip: tooltipText, | 496 tooltip: tooltipText, |
489 disabled: !!disabled | 497 disabled: !!disabled |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 }; | 581 }; |
574 | 582 |
575 /** | 583 /** |
576 * @constructor | 584 * @constructor |
577 */ | 585 */ |
578 function Audits() | 586 function Audits() |
579 { | 587 { |
580 } | 588 } |
581 | 589 |
582 Audits.prototype = { | 590 Audits.prototype = { |
| 591 /** |
| 592 * @return {!AuditCategory} |
| 593 */ |
583 addCategory: function(displayName, resultCount) | 594 addCategory: function(displayName, resultCount) |
584 { | 595 { |
585 var id = "extension-audit-category-" + extensionServer.nextObjectId(); | 596 var id = "extension-audit-category-" + extensionServer.nextObjectId(); |
586 if (typeof resultCount !== "undefined") | 597 if (typeof resultCount !== "undefined") |
587 console.warn("Passing resultCount to audits.addCategory() is depreca
ted. Use AuditResult.updateProgress() instead."); | 598 console.warn("Passing resultCount to audits.addCategory() is depreca
ted. Use AuditResult.updateProgress() instead."); |
588 extensionServer.sendRequest({ command: commands.AddAuditCategory, id: id
, displayName: displayName, resultCount: resultCount }); | 599 extensionServer.sendRequest({ command: commands.AddAuditCategory, id: id
, displayName: displayName, resultCount: resultCount }); |
589 return new AuditCategory(id); | 600 return new AuditCategory(id); |
590 } | 601 } |
591 } | 602 } |
592 | 603 |
(...skipping 19 matching lines...) Expand all Loading... |
612 this.onAuditStarted = new EventSink(events.AuditStarted + id, dispatchAuditE
vent); | 623 this.onAuditStarted = new EventSink(events.AuditStarted + id, dispatchAuditE
vent); |
613 } | 624 } |
614 | 625 |
615 /** | 626 /** |
616 * @constructor | 627 * @constructor |
617 */ | 628 */ |
618 function AuditResultImpl(id) | 629 function AuditResultImpl(id) |
619 { | 630 { |
620 this._id = id; | 631 this._id = id; |
621 | 632 |
622 this.createURL = this._nodeFactory.bind(null, "url"); | 633 this.createURL = this._nodeFactory.bind(this, "url"); |
623 this.createSnippet = this._nodeFactory.bind(null, "snippet"); | 634 this.createSnippet = this._nodeFactory.bind(this, "snippet"); |
624 this.createText = this._nodeFactory.bind(null, "text"); | 635 this.createText = this._nodeFactory.bind(this, "text"); |
625 this.createObject = this._nodeFactory.bind(null, "object"); | 636 this.createObject = this._nodeFactory.bind(this, "object"); |
626 this.createNode = this._nodeFactory.bind(null, "node"); | 637 this.createNode = this._nodeFactory.bind(this, "node"); |
627 } | 638 } |
628 | 639 |
629 AuditResultImpl.prototype = { | 640 AuditResultImpl.prototype = { |
630 addResult: function(displayName, description, severity, details) | 641 addResult: function(displayName, description, severity, details) |
631 { | 642 { |
632 // shorthand for specifying details directly in addResult(). | 643 // shorthand for specifying details directly in addResult(). |
633 if (details && !(details instanceof AuditResultNode)) | 644 if (details && !(details instanceof AuditResultNode)) |
634 details = new AuditResultNode(details instanceof Array ? details : [
details]); | 645 details = new AuditResultNode(details instanceof Array ? details : [
details]); |
635 | 646 |
636 var request = { | 647 var request = { |
637 command: commands.AddAuditResult, | 648 command: commands.AddAuditResult, |
638 resultId: this._id, | 649 resultId: this._id, |
639 displayName: displayName, | 650 displayName: displayName, |
640 description: description, | 651 description: description, |
641 severity: severity, | 652 severity: severity, |
642 details: details | 653 details: details |
643 }; | 654 }; |
644 extensionServer.sendRequest(request); | 655 extensionServer.sendRequest(request); |
645 }, | 656 }, |
646 | 657 |
| 658 /** |
| 659 * @return {!Object} |
| 660 */ |
647 createResult: function() | 661 createResult: function() |
648 { | 662 { |
649 return new AuditResultNode(Array.prototype.slice.call(arguments)); | 663 return new AuditResultNode(Array.prototype.slice.call(arguments)); |
650 }, | 664 }, |
651 | 665 |
652 updateProgress: function(worked, totalWork) | 666 updateProgress: function(worked, totalWork) |
653 { | 667 { |
654 extensionServer.sendRequest({ command: commands.UpdateAuditProgress, res
ultId: this._id, progress: worked / totalWork }); | 668 extensionServer.sendRequest({ command: commands.UpdateAuditProgress, res
ultId: this._id, progress: worked / totalWork }); |
655 }, | 669 }, |
656 | 670 |
657 done: function() | 671 done: function() |
658 { | 672 { |
659 extensionServer.sendRequest({ command: commands.StopAuditCategoryRun, re
sultId: this._id }); | 673 extensionServer.sendRequest({ command: commands.StopAuditCategoryRun, re
sultId: this._id }); |
660 }, | 674 }, |
661 | 675 |
| 676 /** |
| 677 * @type {!Object.<string, string>} |
| 678 */ |
662 get Severity() | 679 get Severity() |
663 { | 680 { |
664 return apiPrivate.audits.Severity; | 681 return apiPrivate.audits.Severity; |
665 }, | 682 }, |
666 | 683 |
| 684 /** |
| 685 * @return {!{type: string, arguments: !Array.<string|number>}} |
| 686 */ |
667 createResourceLink: function(url, lineNumber) | 687 createResourceLink: function(url, lineNumber) |
668 { | 688 { |
669 return { | 689 return { |
670 type: "resourceLink", | 690 type: "resourceLink", |
671 arguments: [url, lineNumber && lineNumber - 1] | 691 arguments: [url, lineNumber && lineNumber - 1] |
672 }; | 692 }; |
673 }, | 693 }, |
674 | 694 |
| 695 /** |
| 696 * @return {!{type: string, arguments: !Array.<string|number>}} |
| 697 */ |
675 _nodeFactory: function(type) | 698 _nodeFactory: function(type) |
676 { | 699 { |
677 return { | 700 return { |
678 type: type, | 701 type: type, |
679 arguments: Array.prototype.slice.call(arguments, 1) | 702 arguments: Array.prototype.slice.call(arguments, 1) |
680 }; | 703 }; |
681 } | 704 } |
682 } | 705 } |
683 | 706 |
684 /** | 707 /** |
685 * @constructor | 708 * @constructor |
686 */ | 709 */ |
687 function AuditResultNode(contents) | 710 function AuditResultNode(contents) |
688 { | 711 { |
689 this.contents = contents; | 712 this.contents = contents; |
690 this.children = []; | 713 this.children = []; |
691 this.expanded = false; | 714 this.expanded = false; |
692 } | 715 } |
693 | 716 |
694 AuditResultNode.prototype = { | 717 AuditResultNode.prototype = { |
| 718 /** |
| 719 * @return {!Object} |
| 720 */ |
695 addChild: function() | 721 addChild: function() |
696 { | 722 { |
697 var node = new AuditResultNode(Array.prototype.slice.call(arguments)); | 723 var node = new AuditResultNode(Array.prototype.slice.call(arguments)); |
698 this.children.push(node); | 724 this.children.push(node); |
699 return node; | 725 return node; |
700 } | 726 } |
701 }; | 727 }; |
702 | 728 |
703 /** | 729 /** |
704 * @constructor | 730 * @constructor |
(...skipping 24 matching lines...) Expand all Loading... |
729 reload: function(optionsOrUserAgent) | 755 reload: function(optionsOrUserAgent) |
730 { | 756 { |
731 var options = null; | 757 var options = null; |
732 if (typeof optionsOrUserAgent === "object") | 758 if (typeof optionsOrUserAgent === "object") |
733 options = optionsOrUserAgent; | 759 options = optionsOrUserAgent; |
734 else if (typeof optionsOrUserAgent === "string") { | 760 else if (typeof optionsOrUserAgent === "string") { |
735 options = { userAgent: optionsOrUserAgent }; | 761 options = { userAgent: optionsOrUserAgent }; |
736 console.warn("Passing userAgent as string parameter to inspectedWind
ow.reload() is deprecated. " + | 762 console.warn("Passing userAgent as string parameter to inspectedWind
ow.reload() is deprecated. " + |
737 "Use inspectedWindow.reload({ userAgent: value}) instea
d."); | 763 "Use inspectedWindow.reload({ userAgent: value}) instea
d."); |
738 } | 764 } |
739 return extensionServer.sendRequest({ command: commands.Reload, options:
options }); | 765 extensionServer.sendRequest({ command: commands.Reload, options: options
}); |
740 }, | 766 }, |
741 | 767 |
| 768 /** |
| 769 * @return {?Object} |
| 770 */ |
742 eval: function(expression, evaluateOptions) | 771 eval: function(expression, evaluateOptions) |
743 { | 772 { |
744 var callback = extractCallbackArgument(arguments); | 773 var callback = extractCallbackArgument(arguments); |
745 function callbackWrapper(result) | 774 function callbackWrapper(result) |
746 { | 775 { |
747 if (result.isError || result.isException) | 776 if (result.isError || result.isException) |
748 callback(undefined, result); | 777 callback(undefined, result); |
749 else | 778 else |
750 callback(result.value); | 779 callback(result.value); |
751 } | 780 } |
752 var request = { | 781 var request = { |
753 command: commands.EvaluateOnInspectedPage, | 782 command: commands.EvaluateOnInspectedPage, |
754 expression: expression | 783 expression: expression |
755 }; | 784 }; |
756 if (typeof evaluateOptions === "object") | 785 if (typeof evaluateOptions === "object") |
757 request.evaluateOptions = evaluateOptions; | 786 request.evaluateOptions = evaluateOptions; |
758 return extensionServer.sendRequest(request, callback && callbackWrapper)
; | 787 extensionServer.sendRequest(request, callback && callbackWrapper); |
| 788 return null; |
759 }, | 789 }, |
760 | 790 |
761 getResources: function(callback) | 791 getResources: function(callback) |
762 { | 792 { |
763 function wrapResource(resourceData) | 793 function wrapResource(resourceData) |
764 { | 794 { |
765 return new Resource(resourceData); | 795 return new Resource(resourceData); |
766 } | 796 } |
767 function callbackWrapper(resources) | 797 function callbackWrapper(resources) |
768 { | 798 { |
769 callback(resources.map(wrapResource)); | 799 callback(resources.map(wrapResource)); |
770 } | 800 } |
771 return extensionServer.sendRequest({ command: commands.GetPageResources
}, callback && callbackWrapper); | 801 extensionServer.sendRequest({ command: commands.GetPageResources }, call
back && callbackWrapper); |
772 } | 802 } |
773 } | 803 } |
774 | 804 |
775 /** | 805 /** |
776 * @constructor | 806 * @constructor |
777 */ | 807 */ |
778 function ResourceImpl(resourceData) | 808 function ResourceImpl(resourceData) |
779 { | 809 { |
780 this._url = resourceData.url | 810 this._url = resourceData.url |
781 this._type = resourceData.type; | 811 this._type = resourceData.type; |
(...skipping 10 matching lines...) Expand all Loading... |
792 return this._type; | 822 return this._type; |
793 }, | 823 }, |
794 | 824 |
795 getContent: function(callback) | 825 getContent: function(callback) |
796 { | 826 { |
797 function callbackWrapper(response) | 827 function callbackWrapper(response) |
798 { | 828 { |
799 callback(response.content, response.encoding); | 829 callback(response.content, response.encoding); |
800 } | 830 } |
801 | 831 |
802 return extensionServer.sendRequest({ command: commands.GetResourceConten
t, url: this._url }, callback && callbackWrapper); | 832 extensionServer.sendRequest({ command: commands.GetResourceContent, url:
this._url }, callback && callbackWrapper); |
803 }, | 833 }, |
804 | 834 |
805 setContent: function(content, commit, callback) | 835 setContent: function(content, commit, callback) |
806 { | 836 { |
807 return extensionServer.sendRequest({ command: commands.SetResourceConten
t, url: this._url, content: content, commit: commit }, callback); | 837 extensionServer.sendRequest({ command: commands.SetResourceContent, url:
this._url, content: content, commit: commit }, callback); |
808 } | 838 } |
809 } | 839 } |
810 | 840 |
811 /** | 841 /** |
812 * @constructor | 842 * @constructor |
813 */ | 843 */ |
814 function TimelineImpl() | 844 function TimelineImpl() |
815 { | 845 { |
816 this.onEventRecorded = new EventSink(events.TimelineEventRecorded); | 846 this.onEventRecorded = new EventSink(events.TimelineEventRecorded); |
817 } | 847 } |
818 | 848 |
| 849 var keyboardEventRequestQueue = []; |
| 850 var forwardTimer = null; |
| 851 |
819 function forwardKeyboardEvent(event) | 852 function forwardKeyboardEvent(event) |
820 { | 853 { |
821 const Esc = "U+001B"; | 854 const Esc = "U+001B"; |
822 // We only care about global hotkeys, not about random text | 855 // We only care about global hotkeys, not about random text |
823 if (!event.ctrlKey && !event.altKey && !event.metaKey && !/^F\d+$/.test(even
t.keyIdentifier) && event.keyIdentifier !== Esc) | 856 if (!event.ctrlKey && !event.altKey && !event.metaKey && !/^F\d+$/.test(even
t.keyIdentifier) && event.keyIdentifier !== Esc) |
824 return; | 857 return; |
825 var request = { | 858 var requestPayload = { |
826 command: commands.ForwardKeyboardEvent, | |
827 eventType: event.type, | 859 eventType: event.type, |
828 ctrlKey: event.ctrlKey, | 860 ctrlKey: event.ctrlKey, |
829 altKey: event.altKey, | 861 altKey: event.altKey, |
830 metaKey: event.metaKey, | 862 metaKey: event.metaKey, |
831 keyIdentifier: event.keyIdentifier, | 863 keyIdentifier: event.keyIdentifier, |
832 location: event.location | 864 location: event.location, |
| 865 keyCode: event.keyCode |
| 866 }; |
| 867 keyboardEventRequestQueue.push(requestPayload); |
| 868 if (!forwardTimer) |
| 869 forwardTimer = setTimeout(forwardEventQueue, 0); |
| 870 } |
| 871 |
| 872 function forwardEventQueue() |
| 873 { |
| 874 forwardTimer = null; |
| 875 var request = { |
| 876 command: commands.ForwardKeyboardEvent, |
| 877 entries: keyboardEventRequestQueue |
833 }; | 878 }; |
834 extensionServer.sendRequest(request); | 879 extensionServer.sendRequest(request); |
| 880 keyboardEventRequestQueue = []; |
835 } | 881 } |
836 | 882 |
837 document.addEventListener("keydown", forwardKeyboardEvent, false); | 883 document.addEventListener("keydown", forwardKeyboardEvent, false); |
838 document.addEventListener("keypress", forwardKeyboardEvent, false); | 884 document.addEventListener("keypress", forwardKeyboardEvent, false); |
839 | 885 |
840 /** | 886 /** |
841 * @constructor | 887 * @constructor |
842 */ | 888 */ |
843 function ExtensionServerClient() | 889 function ExtensionServerClient() |
844 { | 890 { |
(...skipping 13 matching lines...) Expand all Loading... |
858 } | 904 } |
859 | 905 |
860 ExtensionServerClient.prototype = { | 906 ExtensionServerClient.prototype = { |
861 /** | 907 /** |
862 * @param {function()=} callback | 908 * @param {function()=} callback |
863 */ | 909 */ |
864 sendRequest: function(message, callback) | 910 sendRequest: function(message, callback) |
865 { | 911 { |
866 if (typeof callback === "function") | 912 if (typeof callback === "function") |
867 message.requestId = this._registerCallback(callback); | 913 message.requestId = this._registerCallback(callback); |
868 return this._port.postMessage(message); | 914 this._port.postMessage(message); |
869 }, | 915 }, |
870 | 916 |
| 917 /** |
| 918 * @return {boolean} |
| 919 */ |
871 hasHandler: function(command) | 920 hasHandler: function(command) |
872 { | 921 { |
873 return !!this._handlers[command]; | 922 return !!this._handlers[command]; |
874 }, | 923 }, |
875 | 924 |
876 registerHandler: function(command, handler) | 925 registerHandler: function(command, handler) |
877 { | 926 { |
878 this._handlers[command] = handler; | 927 this._handlers[command] = handler; |
879 }, | 928 }, |
880 | 929 |
881 unregisterHandler: function(command) | 930 unregisterHandler: function(command) |
882 { | 931 { |
883 delete this._handlers[command]; | 932 delete this._handlers[command]; |
884 }, | 933 }, |
885 | 934 |
| 935 /** |
| 936 * @return {string} |
| 937 */ |
886 nextObjectId: function() | 938 nextObjectId: function() |
887 { | 939 { |
888 return injectedScriptId + "_" + ++this._lastObjectId; | 940 return injectedScriptId + "_" + ++this._lastObjectId; |
889 }, | 941 }, |
890 | 942 |
891 _registerCallback: function(callback) | 943 _registerCallback: function(callback) |
892 { | 944 { |
893 var id = ++this._lastRequestId; | 945 var id = ++this._lastRequestId; |
894 this._callbacks[id] = callback; | 946 this._callbacks[id] = callback; |
895 return id; | 947 return id; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
934 } | 986 } |
935 | 987 |
936 // extensionServer is a closure variable defined by the glue below -- make sure
we fail if it's not there. | 988 // extensionServer is a closure variable defined by the glue below -- make sure
we fail if it's not there. |
937 if (!extensionServer) | 989 if (!extensionServer) |
938 extensionServer = new ExtensionServerClient(); | 990 extensionServer = new ExtensionServerClient(); |
939 | 991 |
940 return new InspectorExtensionAPI(); | 992 return new InspectorExtensionAPI(); |
941 } | 993 } |
942 | 994 |
943 /** | 995 /** |
944 * @param {!ExtensionDescriptor} extensionInfo | 996 * @suppress {checkVars, checkTypes} |
945 * @return {string} | |
946 */ | 997 */ |
947 function buildExtensionAPIInjectedScript(extensionInfo) | |
948 { | |
949 return "(function(injectedScriptId){ " + | |
950 "var extensionServer;" + | |
951 defineCommonExtensionSymbols.toString() + ";" + | |
952 injectedExtensionAPI.toString() + ";" + | |
953 buildPlatformExtensionAPI(extensionInfo) + ";" + | |
954 "platformExtensionAPI(injectedExtensionAPI(injectedScriptId));" + | |
955 "return {};" + | |
956 "})"; | |
957 } | |
958 /* | |
959 * Copyright (C) 2011 Google Inc. All rights reserved. | |
960 * | |
961 * Redistribution and use in source and binary forms, with or without | |
962 * modification, are permitted provided that the following conditions are | |
963 * met: | |
964 * | |
965 * * Redistributions of source code must retain the above copyright | |
966 * notice, this list of conditions and the following disclaimer. | |
967 * * Redistributions in binary form must reproduce the above | |
968 * copyright notice, this list of conditions and the following disclaimer | |
969 * in the documentation and/or other materials provided with the | |
970 * distribution. | |
971 * * Neither the name of Google Inc. nor the names of its | |
972 * contributors may be used to endorse or promote products derived from | |
973 * this software without specific prior written permission. | |
974 * | |
975 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
976 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
977 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
978 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
979 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
980 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
981 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
982 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
983 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
984 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
985 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
986 */ | |
987 | |
988 function platformExtensionAPI(coreAPI) | 998 function platformExtensionAPI(coreAPI) |
989 { | 999 { |
990 function getTabId() | 1000 function getTabId() |
991 { | 1001 { |
992 return tabId; | 1002 return tabId; |
993 } | 1003 } |
994 chrome = window.chrome || {}; | 1004 chrome = window.chrome || {}; |
995 // Override chrome.devtools as a workaround for a error-throwing getter bein
g exposed | 1005 // Override chrome.devtools as a workaround for a error-throwing getter bein
g exposed |
996 // in extension pages loaded into a non-extension process (only happens for
remote client | 1006 // in extension pages loaded into a non-extension process (only happens for
remote client |
997 // extensions) | 1007 // extensions) |
(...skipping 16 matching lines...) Expand all Loading... |
1014 for (var i = 0; i < properties.length; ++i) { | 1024 for (var i = 0; i < properties.length; ++i) { |
1015 var descriptor = Object.getOwnPropertyDescriptor(coreAPI, properties
[i]); | 1025 var descriptor = Object.getOwnPropertyDescriptor(coreAPI, properties
[i]); |
1016 Object.defineProperty(chrome.experimental.devtools, properties[i], d
escriptor); | 1026 Object.defineProperty(chrome.experimental.devtools, properties[i], d
escriptor); |
1017 } | 1027 } |
1018 chrome.experimental.devtools.inspectedWindow = chrome.devtools.inspected
Window; | 1028 chrome.experimental.devtools.inspectedWindow = chrome.devtools.inspected
Window; |
1019 } | 1029 } |
1020 if (extensionInfo.exposeWebInspectorNamespace) | 1030 if (extensionInfo.exposeWebInspectorNamespace) |
1021 window.webInspector = coreAPI; | 1031 window.webInspector = coreAPI; |
1022 } | 1032 } |
1023 | 1033 |
| 1034 /** |
| 1035 * @param {!ExtensionDescriptor} extensionInfo |
| 1036 * @return {string} |
| 1037 */ |
| 1038 function buildPlatformExtensionAPI(extensionInfo) |
| 1039 { |
| 1040 return "var extensionInfo = " + JSON.stringify(extensionInfo) + ";" + |
| 1041 "var tabId = " + WebInspector._inspectedTabId + ";" + |
| 1042 platformExtensionAPI.toString(); |
| 1043 } |
| 1044 |
| 1045 /** |
| 1046 * @param {!ExtensionDescriptor} extensionInfo |
| 1047 * @return {string} |
| 1048 */ |
| 1049 function buildExtensionAPIInjectedScript(extensionInfo) |
| 1050 { |
| 1051 return "(function(injectedScriptId){ " + |
| 1052 "var extensionServer;" + |
| 1053 defineCommonExtensionSymbols.toString() + ";" + |
| 1054 injectedExtensionAPI.toString() + ";" + |
| 1055 buildPlatformExtensionAPI(extensionInfo) + ";" + |
| 1056 "platformExtensionAPI(injectedExtensionAPI(injectedScriptId));" + |
| 1057 "return {};" + |
| 1058 "})"; |
| 1059 } |
| 1060 |
1024 var tabId; | 1061 var tabId; |
1025 var extensionInfo = {}; | 1062 var extensionInfo = {}; |
1026 var extensionServer; | 1063 var extensionServer; |
1027 platformExtensionAPI(injectedExtensionAPI("remote-" + window.parent.fram
es.length)); | 1064 platformExtensionAPI(injectedExtensionAPI("remote-" + window.parent.fram
es.length)); |
1028 })(); | 1065 })(); |
OLD | NEW |