From c0d23746bc454fc1b8a89b94af4f438f410b8a2a Mon Sep 17 00:00:00 2001
From: Phil Ringnalda
Date: Fri, 27 Nov 2015 21:39:23 -0800
Subject: [PATCH] Back out 8 changesets (bug 1223573) for Win7 PGO xperf
unexpected access failures CLOSED TREE
Backed out changeset 19876a153a00 (bug 1223573)
Backed out changeset 14251062e347 (bug 1223573)
Backed out changeset 081b0af71d6e (bug 1223573)
Backed out changeset 21ebe3534e58 (bug 1223573)
Backed out changeset d6754894897c (bug 1223573)
Backed out changeset 1b4d6308002e (bug 1223573)
Backed out changeset a13b3bba5529 (bug 1223573)
Backed out changeset f3ccccf5b6fe (bug 1223573)
--HG--
rename : browser/extensions/loop/.eslintignore => browser/components/loop/.eslintignore
rename : browser/extensions/loop/.eslintrc => browser/components/loop/.eslintrc
rename : browser/extensions/loop/.eslintrc-gecko => browser/components/loop/.eslintrc-gecko
rename : browser/extensions/loop/.gitignore => browser/components/loop/.gitignore
rename : browser/extensions/loop/README.txt => browser/components/loop/README.txt
rename : browser/extensions/loop/build-jsx => browser/components/loop/build-jsx
rename : browser/extensions/loop/content/panels/conversation.html => browser/components/loop/content/conversation.html
rename : browser/extensions/loop/content/panels/css/panel.css => browser/components/loop/content/css/panel.css
rename : browser/extensions/loop/content/panels/js/.eslintrc => browser/components/loop/content/js/.eslintrc
rename : browser/extensions/loop/content/panels/js/conversation.js => browser/components/loop/content/js/conversation.js
rename : browser/extensions/loop/content/panels/js/conversation.jsx => browser/components/loop/content/js/conversation.jsx
rename : browser/extensions/loop/content/panels/js/conversationAppStore.js => browser/components/loop/content/js/conversationAppStore.js
rename : browser/extensions/loop/content/panels/js/feedbackViews.js => browser/components/loop/content/js/feedbackViews.js
rename : browser/extensions/loop/content/panels/js/feedbackViews.jsx => browser/components/loop/content/js/feedbackViews.jsx
rename : browser/extensions/loop/content/panels/js/otconfig.js => browser/components/loop/content/js/otconfig.js
rename : browser/extensions/loop/content/panels/js/panel.js => browser/components/loop/content/js/panel.js
rename : browser/extensions/loop/content/panels/js/panel.jsx => browser/components/loop/content/js/panel.jsx
rename : browser/extensions/loop/content/panels/js/roomStore.js => browser/components/loop/content/js/roomStore.js
rename : browser/extensions/loop/content/panels/js/roomViews.js => browser/components/loop/content/js/roomViews.js
rename : browser/extensions/loop/content/panels/js/roomViews.jsx => browser/components/loop/content/js/roomViews.jsx
rename : browser/extensions/loop/content/panels/vendor/l10n.js => browser/components/loop/content/libs/l10n.js
rename : browser/extensions/loop/content/panels/panel.html => browser/components/loop/content/panel.html
rename : browser/extensions/loop/content/shared/README.md => browser/components/loop/content/shared/README.md
rename : browser/extensions/loop/content/shared/css/common.css => browser/components/loop/content/shared/css/common.css
rename : browser/extensions/loop/content/shared/css/conversation.css => browser/components/loop/content/shared/css/conversation.css
rename : browser/extensions/loop/content/shared/css/reset.css => browser/components/loop/content/shared/css/reset.css
rename : browser/extensions/loop/content/shared/img/02.png => browser/components/loop/content/shared/img/02.png
rename : browser/extensions/loop/content/shared/img/02@2x.png => browser/components/loop/content/shared/img/02@2x.png
rename : browser/extensions/loop/content/shared/img/animated-spinner.svg => browser/components/loop/content/shared/img/animated-spinner.svg
rename : browser/extensions/loop/content/shared/img/audio-call-avatar.svg => browser/components/loop/content/shared/img/audio-call-avatar.svg
rename : browser/extensions/loop/content/shared/img/audio-default-16x16@1.5x.png => browser/components/loop/content/shared/img/audio-default-16x16@1.5x.png
rename : browser/extensions/loop/content/shared/img/audio-default-16x16@2x.png => browser/components/loop/content/shared/img/audio-default-16x16@2x.png
rename : browser/extensions/loop/content/shared/img/avatars.svg => browser/components/loop/content/shared/img/avatars.svg
rename : browser/extensions/loop/content/shared/img/beta-ribbon.svg => browser/components/loop/content/shared/img/beta-ribbon.svg
rename : browser/extensions/loop/content/shared/img/chatbubble-arrow-left.svg => browser/components/loop/content/shared/img/chatbubble-arrow-left.svg
rename : browser/extensions/loop/content/shared/img/chatbubble-arrow-right.svg => browser/components/loop/content/shared/img/chatbubble-arrow-right.svg
rename : browser/extensions/loop/content/shared/img/check.svg => browser/components/loop/content/shared/img/check.svg
rename : browser/extensions/loop/content/shared/img/ellipsis-v.svg => browser/components/loop/content/shared/img/ellipsis-v.svg
rename : browser/extensions/loop/content/shared/img/empty_conversations.svg => browser/components/loop/content/shared/img/empty_conversations.svg
rename : browser/extensions/loop/content/shared/img/empty_search.svg => browser/components/loop/content/shared/img/empty_search.svg
rename : browser/extensions/loop/content/shared/img/facemute-14x14.png => browser/components/loop/content/shared/img/facemute-14x14.png
rename : browser/extensions/loop/content/shared/img/facemute-14x14@2x.png => browser/components/loop/content/shared/img/facemute-14x14@2x.png
rename : browser/extensions/loop/content/shared/img/firefox-avatar.svg => browser/components/loop/content/shared/img/firefox-avatar.svg
rename : browser/extensions/loop/content/shared/img/firefox-logo.png => browser/components/loop/content/shared/img/firefox-logo.png
rename : browser/extensions/loop/content/shared/img/hangup-inverse-14x14.png => browser/components/loop/content/shared/img/hangup-inverse-14x14.png
rename : browser/extensions/loop/content/shared/img/hangup-inverse-14x14@2x.png => browser/components/loop/content/shared/img/hangup-inverse-14x14@2x.png
rename : browser/extensions/loop/content/shared/img/happy.png => browser/components/loop/content/shared/img/happy.png
rename : browser/extensions/loop/content/shared/img/hello_logo.svg => browser/components/loop/content/shared/img/hello_logo.svg
rename : browser/extensions/loop/content/shared/img/helloicon.svg => browser/components/loop/content/shared/img/helloicon.svg
rename : browser/extensions/loop/content/shared/img/icon_32.png => browser/components/loop/content/shared/img/icon_32.png
rename : browser/extensions/loop/content/shared/img/icon_64.png => browser/components/loop/content/shared/img/icon_64.png
rename : browser/extensions/loop/content/shared/img/icons-10x10.svg => browser/components/loop/content/shared/img/icons-10x10.svg
rename : browser/extensions/loop/content/shared/img/icons-14x14.svg => browser/components/loop/content/shared/img/icons-14x14.svg
rename : browser/extensions/loop/content/shared/img/icons-16x16.svg => browser/components/loop/content/shared/img/icons-16x16.svg
rename : browser/extensions/loop/content/shared/img/movistar.png => browser/components/loop/content/shared/img/movistar.png
rename : browser/extensions/loop/content/shared/img/movistar@2x.png => browser/components/loop/content/shared/img/movistar@2x.png
rename : browser/extensions/loop/content/shared/img/mute-inverse-14x14.png => browser/components/loop/content/shared/img/mute-inverse-14x14.png
rename : browser/extensions/loop/content/shared/img/mute-inverse-14x14@2x.png => browser/components/loop/content/shared/img/mute-inverse-14x14@2x.png
rename : browser/extensions/loop/content/shared/img/pause-12x12.svg => browser/components/loop/content/shared/img/pause-12x12.svg
rename : browser/extensions/loop/content/shared/img/play-12x12.svg => browser/components/loop/content/shared/img/play-12x12.svg
rename : browser/extensions/loop/content/shared/img/sad.png => browser/components/loop/content/shared/img/sad.png
rename : browser/extensions/loop/content/shared/img/sad_hello_icon_64x64.svg => browser/components/loop/content/shared/img/sad_hello_icon_64x64.svg
rename : browser/extensions/loop/content/shared/img/spinner.png => browser/components/loop/content/shared/img/spinner.png
rename : browser/extensions/loop/content/shared/img/spinner.svg => browser/components/loop/content/shared/img/spinner.svg
rename : browser/extensions/loop/content/shared/img/spinner@2x.png => browser/components/loop/content/shared/img/spinner@2x.png
rename : browser/extensions/loop/content/shared/img/stop-12x12.svg => browser/components/loop/content/shared/img/stop-12x12.svg
rename : browser/extensions/loop/content/shared/img/audio-hover.svg => browser/components/loop/content/shared/img/svg/audio-hover.svg
rename : browser/extensions/loop/content/shared/img/audio-mute-hover.svg => browser/components/loop/content/shared/img/svg/audio-mute-hover.svg
rename : browser/extensions/loop/content/shared/img/audio-mute.svg => browser/components/loop/content/shared/img/svg/audio-mute.svg
rename : browser/extensions/loop/content/shared/img/audio.svg => browser/components/loop/content/shared/img/svg/audio.svg
rename : browser/extensions/loop/content/shared/img/cam_audio-no.svg => browser/components/loop/content/shared/img/svg/cam_audio-no.svg
rename : browser/extensions/loop/content/shared/img/cam_audio.svg => browser/components/loop/content/shared/img/svg/cam_audio.svg
rename : browser/extensions/loop/content/shared/img/cam_audio_h.svg => browser/components/loop/content/shared/img/svg/cam_audio_h.svg
rename : browser/extensions/loop/content/shared/img/exit.svg => browser/components/loop/content/shared/img/svg/exit.svg
rename : browser/extensions/loop/content/shared/img/glyph-email-16x16.svg => browser/components/loop/content/shared/img/svg/glyph-email-16x16.svg
rename : browser/extensions/loop/content/shared/img/glyph-facebook-16x16.svg => browser/components/loop/content/shared/img/svg/glyph-facebook-16x16.svg
rename : browser/extensions/loop/content/shared/img/glyph-help-16x16.svg => browser/components/loop/content/shared/img/svg/glyph-help-16x16.svg
rename : browser/extensions/loop/content/shared/img/glyph-link-16x16.svg => browser/components/loop/content/shared/img/svg/glyph-link-16x16.svg
rename : browser/extensions/loop/content/shared/img/glyph-user-16x16.svg => browser/components/loop/content/shared/img/svg/glyph-user-16x16.svg
rename : browser/extensions/loop/content/shared/img/media-group-left-hover.svg => browser/components/loop/content/shared/img/svg/media-group-left-hover.svg
rename : browser/extensions/loop/content/shared/img/media-group-right-hover.svg => browser/components/loop/content/shared/img/svg/media-group-right-hover.svg
rename : browser/extensions/loop/content/shared/img/media-group.svg => browser/components/loop/content/shared/img/svg/media-group.svg
rename : browser/extensions/loop/content/shared/img/settings-hover.svg => browser/components/loop/content/shared/img/svg/settings-hover.svg
rename : browser/extensions/loop/content/shared/img/settings.svg => browser/components/loop/content/shared/img/svg/settings.svg
rename : browser/extensions/loop/content/shared/img/sharing-active.svg => browser/components/loop/content/shared/img/svg/sharing-active.svg
rename : browser/extensions/loop/content/shared/img/sharing-hover.svg => browser/components/loop/content/shared/img/svg/sharing-hover.svg
rename : browser/extensions/loop/content/shared/img/sharing-pending.svg => browser/components/loop/content/shared/img/svg/sharing-pending.svg
rename : browser/extensions/loop/content/shared/img/sharing.svg => browser/components/loop/content/shared/img/svg/sharing.svg
rename : browser/extensions/loop/content/shared/img/video-hover.svg => browser/components/loop/content/shared/img/svg/video-hover.svg
rename : browser/extensions/loop/content/shared/img/video-mute-hover.svg => browser/components/loop/content/shared/img/svg/video-mute-hover.svg
rename : browser/extensions/loop/content/shared/img/video-mute.svg => browser/components/loop/content/shared/img/svg/video-mute.svg
rename : browser/extensions/loop/content/shared/img/video.svg => browser/components/loop/content/shared/img/svg/video.svg
rename : browser/extensions/loop/content/shared/img/telefonica.png => browser/components/loop/content/shared/img/telefonica.png
rename : browser/extensions/loop/content/shared/img/telefonica@2x.png => browser/components/loop/content/shared/img/telefonica@2x.png
rename : browser/extensions/loop/content/shared/img/vivo.png => browser/components/loop/content/shared/img/vivo.png
rename : browser/extensions/loop/content/shared/img/vivo@2x.png => browser/components/loop/content/shared/img/vivo@2x.png
rename : browser/extensions/loop/content/shared/js/actions.js => browser/components/loop/content/shared/js/actions.js
rename : browser/extensions/loop/content/shared/js/activeRoomStore.js => browser/components/loop/content/shared/js/activeRoomStore.js
rename : browser/extensions/loop/content/shared/js/crypto.js => browser/components/loop/content/shared/js/crypto.js
rename : browser/extensions/loop/content/shared/js/dispatcher.js => browser/components/loop/content/shared/js/dispatcher.js
rename : browser/extensions/loop/content/shared/js/linkifiedTextView.js => browser/components/loop/content/shared/js/linkifiedTextView.js
rename : browser/extensions/loop/content/shared/js/linkifiedTextView.jsx => browser/components/loop/content/shared/js/linkifiedTextView.jsx
rename : browser/extensions/loop/content/shared/js/loopapi-client.js => browser/components/loop/content/shared/js/loopapi-client.js
rename : browser/extensions/loop/content/shared/js/mixins.js => browser/components/loop/content/shared/js/mixins.js
rename : browser/extensions/loop/content/shared/js/models.js => browser/components/loop/content/shared/js/models.js
rename : browser/extensions/loop/content/shared/js/otSdkDriver.js => browser/components/loop/content/shared/js/otSdkDriver.js
rename : browser/extensions/loop/content/shared/js/store.js => browser/components/loop/content/shared/js/store.js
rename : browser/extensions/loop/content/shared/js/textChatStore.js => browser/components/loop/content/shared/js/textChatStore.js
rename : browser/extensions/loop/content/shared/js/textChatView.js => browser/components/loop/content/shared/js/textChatView.js
rename : browser/extensions/loop/content/shared/js/textChatView.jsx => browser/components/loop/content/shared/js/textChatView.jsx
rename : browser/extensions/loop/content/shared/js/urlRegExps.js => browser/components/loop/content/shared/js/urlRegExps.js
rename : browser/extensions/loop/content/shared/js/utils.js => browser/components/loop/content/shared/js/utils.js
rename : browser/extensions/loop/content/shared/js/validate.js => browser/components/loop/content/shared/js/validate.js
rename : browser/extensions/loop/content/shared/js/views.js => browser/components/loop/content/shared/js/views.js
rename : browser/extensions/loop/content/shared/js/views.jsx => browser/components/loop/content/shared/js/views.jsx
rename : browser/extensions/loop/content/shared/vendor/backbone-1.2.1.js => browser/components/loop/content/shared/libs/backbone-1.2.1.js
rename : browser/extensions/loop/content/shared/vendor/classnames-2.2.0.js => browser/components/loop/content/shared/libs/classnames-2.2.0.js
rename : browser/extensions/loop/content/shared/vendor/lodash-3.9.3.js => browser/components/loop/content/shared/libs/lodash-3.9.3.js
rename : browser/extensions/loop/content/shared/vendor/react-0.13.3-prod.js => browser/components/loop/content/shared/libs/react-0.13.3-prod.js
rename : browser/extensions/loop/content/shared/vendor/react-0.13.3.js => browser/components/loop/content/shared/libs/react-0.13.3.js
rename : browser/extensions/loop/content/shared/vendor/sdk-content/css/ot.css => browser/components/loop/content/shared/libs/sdk-content/css/ot.css
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-denied-chrome.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-denied-chrome.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-denied-copy-firefox.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-denied-copy-firefox.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-denied-firefox.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-denied-firefox.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-predenied-chrome.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-predenied-chrome.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-prompt-chrome.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-prompt-chrome.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/audioonly-publisher.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/audioonly-publisher.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/audioonly-subscriber.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/audioonly-subscriber.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/buttons.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/buttons.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/loader.gif => browser/components/loop/content/shared/libs/sdk-content/images/rtc/loader.gif
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/mic-off.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/mic-off.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/mic-on.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/mic-on.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/speaker-off.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/speaker-off.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/speaker-on.png => browser/components/loop/content/shared/libs/sdk-content/images/rtc/speaker-on.png
rename : browser/extensions/loop/content/shared/vendor/sdk-content/js/dynamic_config.min.js => browser/components/loop/content/shared/libs/sdk-content/js/dynamic_config.min.js
rename : browser/extensions/loop/content/shared/vendor/sdk.js => browser/components/loop/content/shared/libs/sdk.js
rename : browser/extensions/loop/content/shared/sounds/connected.ogg => browser/components/loop/content/shared/sounds/connected.ogg
rename : browser/extensions/loop/content/shared/sounds/connecting.ogg => browser/components/loop/content/shared/sounds/connecting.ogg
rename : browser/extensions/loop/content/shared/sounds/failure.ogg => browser/components/loop/content/shared/sounds/failure.ogg
rename : browser/extensions/loop/content/shared/sounds/message.ogg => browser/components/loop/content/shared/sounds/message.ogg
rename : browser/extensions/loop/content/shared/sounds/ringtone.ogg => browser/components/loop/content/shared/sounds/ringtone.ogg
rename : browser/extensions/loop/content/shared/sounds/room-joined-in.ogg => browser/components/loop/content/shared/sounds/room-joined-in.ogg
rename : browser/extensions/loop/content/shared/sounds/room-joined.ogg => browser/components/loop/content/shared/sounds/room-joined.ogg
rename : browser/extensions/loop/content/shared/sounds/room-left.ogg => browser/components/loop/content/shared/sounds/room-left.ogg
rename : browser/extensions/loop/content/shared/sounds/terminated.ogg => browser/components/loop/content/shared/sounds/terminated.ogg
rename : browser/extensions/loop/jar.mn => browser/components/loop/jar.mn
rename : browser/extensions/loop/manifest.ini => browser/components/loop/manifest.ini
rename : browser/extensions/loop/content/modules/.eslintrc => browser/components/loop/modules/.eslintrc
rename : browser/extensions/loop/content/modules/LoopRooms.jsm => browser/components/loop/modules/LoopRooms.jsm
rename : browser/extensions/loop/content/modules/LoopRoomsCache.jsm => browser/components/loop/modules/LoopRoomsCache.jsm
rename : browser/extensions/loop/content/modules/MozLoopAPI.jsm => browser/components/loop/modules/MozLoopAPI.jsm
rename : browser/extensions/loop/content/modules/MozLoopPushHandler.jsm => browser/components/loop/modules/MozLoopPushHandler.jsm
rename : browser/extensions/loop/content/modules/MozLoopService.jsm => browser/components/loop/modules/MozLoopService.jsm
rename : browser/extensions/loop/content/modules/MozLoopWorker.js => browser/components/loop/modules/MozLoopWorker.js
rename : browser/extensions/loop/moz.build => browser/components/loop/moz.build
rename : browser/extensions/loop/run-all-loop-tests.sh => browser/components/loop/run-all-loop-tests.sh
rename : browser/extensions/loop/standalone/.gitignore => browser/components/loop/standalone/.gitignore
rename : browser/extensions/loop/standalone/Makefile => browser/components/loop/standalone/Makefile
rename : browser/extensions/loop/standalone/README.md => browser/components/loop/standalone/README.md
rename : browser/extensions/loop/standalone/content/css/webapp.css => browser/components/loop/standalone/content/css/webapp.css
rename : browser/extensions/loop/standalone/content/favicon.ico => browser/components/loop/standalone/content/favicon.ico
rename : browser/extensions/loop/standalone/content/img/gum-chrome.svg => browser/components/loop/standalone/content/img/gum-chrome.svg
rename : browser/extensions/loop/standalone/content/img/gum-firefox.svg => browser/components/loop/standalone/content/img/gum-firefox.svg
rename : browser/extensions/loop/standalone/content/img/gum-opera.svg => browser/components/loop/standalone/content/img/gum-opera.svg
rename : browser/extensions/loop/standalone/content/img/gum-others.svg => browser/components/loop/standalone/content/img/gum-others.svg
rename : browser/extensions/loop/standalone/content/img/hello-logo-text.svg => browser/components/loop/standalone/content/img/hello-logo-text.svg
rename : browser/extensions/loop/standalone/content/img/logo.png => browser/components/loop/standalone/content/img/logo.png
rename : browser/extensions/loop/standalone/content/img/mozilla-logo.svg => browser/components/loop/standalone/content/img/mozilla-logo.svg
rename : browser/extensions/loop/standalone/content/index.html => browser/components/loop/standalone/content/index.html
rename : browser/extensions/loop/standalone/content/js/standaloneAppStore.js => browser/components/loop/standalone/content/js/standaloneAppStore.js
rename : browser/extensions/loop/standalone/content/js/standaloneMetricsStore.js => browser/components/loop/standalone/content/js/standaloneMetricsStore.js
rename : browser/extensions/loop/standalone/content/js/standaloneMozLoop.js => browser/components/loop/standalone/content/js/standaloneMozLoop.js
rename : browser/extensions/loop/standalone/content/js/standaloneRoomViews.js => browser/components/loop/standalone/content/js/standaloneRoomViews.js
rename : browser/extensions/loop/standalone/content/js/standaloneRoomViews.jsx => browser/components/loop/standalone/content/js/standaloneRoomViews.jsx
rename : browser/extensions/loop/standalone/content/js/webapp.js => browser/components/loop/standalone/content/js/webapp.js
rename : browser/extensions/loop/standalone/content/js/webapp.jsx => browser/components/loop/standalone/content/js/webapp.jsx
rename : browser/extensions/loop/standalone/content/l10n/en-US/loop.properties => browser/components/loop/standalone/content/l10n/en-US/loop.properties
rename : browser/extensions/loop/standalone/content/libs/l10n-gaia-02ca67948fe8.js => browser/components/loop/standalone/content/libs/l10n-gaia-02ca67948fe8.js
rename : browser/extensions/loop/standalone/content/libs/l10n-gaia-upstream.txt => browser/components/loop/standalone/content/libs/l10n-gaia-upstream.txt
rename : browser/extensions/loop/standalone/content/robots.txt => browser/components/loop/standalone/content/robots.txt
rename : browser/extensions/loop/standalone/content/webappEntryPoint.js => browser/components/loop/standalone/content/webappEntryPoint.js
rename : browser/extensions/loop/standalone/package.json => browser/components/loop/standalone/package.json
rename : browser/extensions/loop/standalone/server.js => browser/components/loop/standalone/server.js
rename : browser/extensions/loop/standalone/webpack.config.js => browser/components/loop/standalone/webpack.config.js
rename : browser/extensions/loop/test/.eslintrc => browser/components/loop/test/.eslintrc
rename : browser/extensions/loop/test/coverage/index.html => browser/components/loop/test/coverage/index.html
rename : browser/extensions/loop/test/desktop-local/.eslintrc => browser/components/loop/test/desktop-local/.eslintrc
rename : browser/extensions/loop/test/desktop-local/README.md => browser/components/loop/test/desktop-local/README.md
rename : browser/extensions/loop/test/desktop-local/conversationAppStore_test.js => browser/components/loop/test/desktop-local/conversationAppStore_test.js
rename : browser/extensions/loop/test/desktop-local/conversation_test.js => browser/components/loop/test/desktop-local/conversation_test.js
rename : browser/extensions/loop/test/desktop-local/feedbackViews_test.js => browser/components/loop/test/desktop-local/feedbackViews_test.js
rename : browser/extensions/loop/test/desktop-local/index.html => browser/components/loop/test/desktop-local/index.html
rename : browser/extensions/loop/test/desktop-local/l10n_test.js => browser/components/loop/test/desktop-local/l10n_test.js
rename : browser/extensions/loop/test/desktop-local/panel_test.js => browser/components/loop/test/desktop-local/panel_test.js
rename : browser/extensions/loop/test/desktop-local/roomStore_test.js => browser/components/loop/test/desktop-local/roomStore_test.js
rename : browser/extensions/loop/test/desktop-local/roomViews_test.js => browser/components/loop/test/desktop-local/roomViews_test.js
rename : browser/extensions/loop/test/desktop-local/test_desktop_all.py => browser/components/loop/test/desktop-local/test_desktop_all.py
rename : browser/extensions/loop/test/functional/config.py => browser/components/loop/test/functional/config.py
rename : browser/extensions/loop/test/functional/hanging_threads.py => browser/components/loop/test/functional/hanging_threads.py
rename : browser/extensions/loop/test/functional/manifest.ini => browser/components/loop/test/functional/manifest.ini
rename : browser/extensions/loop/test/functional/serversetup.py => browser/components/loop/test/functional/serversetup.py
rename : browser/extensions/loop/test/functional/test_1_browser_call.py => browser/components/loop/test/functional/test_1_browser_call.py
rename : browser/extensions/loop/test/index.html => browser/components/loop/test/index.html
rename : browser/extensions/loop/test/karma/head.js => browser/components/loop/test/karma/head.js
rename : browser/extensions/loop/test/karma/karma.conf.base.js => browser/components/loop/test/karma/karma.conf.base.js
rename : browser/extensions/loop/test/karma/karma.coverage.desktop.js => browser/components/loop/test/karma/karma.coverage.desktop.js
rename : browser/extensions/loop/test/karma/karma.coverage.shared_standalone.js => browser/components/loop/test/karma/karma.coverage.shared_standalone.js
rename : browser/extensions/loop/test/mochitest/.eslintrc => browser/components/loop/test/mochitest/.eslintrc
rename : browser/extensions/loop/test/mochitest/browser.ini => browser/components/loop/test/mochitest/browser.ini
rename : browser/extensions/loop/test/mochitest/browser_LoopRooms_channel.js => browser/components/loop/test/mochitest/browser_LoopRooms_channel.js
rename : browser/extensions/loop/test/mochitest/browser_fxa_login.js => browser/components/loop/test/mochitest/browser_fxa_login.js
rename : browser/extensions/loop/test/mochitest/browser_loop_fxa_server.js => browser/components/loop/test/mochitest/browser_loop_fxa_server.js
rename : browser/extensions/loop/test/mochitest/browser_mozLoop_appVersionInfo.js => browser/components/loop/test/mochitest/browser_mozLoop_appVersionInfo.js
rename : browser/extensions/loop/test/mochitest/browser_mozLoop_chat.js => browser/components/loop/test/mochitest/browser_mozLoop_chat.js
rename : browser/extensions/loop/test/mochitest/browser_mozLoop_context.js => browser/components/loop/test/mochitest/browser_mozLoop_context.js
rename : browser/extensions/loop/test/mochitest/browser_mozLoop_sharingListeners.js => browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
rename : browser/extensions/loop/test/mochitest/browser_mozLoop_socialShare.js => browser/components/loop/test/mochitest/browser_mozLoop_socialShare.js
rename : browser/extensions/loop/test/mochitest/browser_mozLoop_telemetry.js => browser/components/loop/test/mochitest/browser_mozLoop_telemetry.js
rename : browser/extensions/loop/test/mochitest/browser_toolbarbutton.js => browser/components/loop/test/mochitest/browser_toolbarbutton.js
rename : browser/extensions/loop/test/mochitest/head.js => browser/components/loop/test/mochitest/head.js
rename : browser/extensions/loop/test/mochitest/loop_fxa.sjs => browser/components/loop/test/mochitest/loop_fxa.sjs
rename : browser/extensions/loop/test/mochitest/test_loopLinkClicker_channel.html => browser/components/loop/test/mochitest/test_loopLinkClicker_channel.html
rename : browser/extensions/loop/test/package.json => browser/components/loop/test/package.json
rename : browser/extensions/loop/test/shared/activeRoomStore_test.js => browser/components/loop/test/shared/activeRoomStore_test.js
rename : browser/extensions/loop/test/shared/crypto_test.js => browser/components/loop/test/shared/crypto_test.js
rename : browser/extensions/loop/test/shared/dispatcher_test.js => browser/components/loop/test/shared/dispatcher_test.js
rename : browser/extensions/loop/test/shared/frontend_tester.py => browser/components/loop/test/shared/frontend_tester.py
rename : browser/extensions/loop/test/shared/index.html => browser/components/loop/test/shared/index.html
rename : browser/extensions/loop/test/shared/linkifiedTextView_test.js => browser/components/loop/test/shared/linkifiedTextView_test.js
rename : browser/extensions/loop/test/shared/loop_mocha_utils.js => browser/components/loop/test/shared/loop_mocha_utils.js
rename : browser/extensions/loop/test/shared/loopapi-client_test.js => browser/components/loop/test/shared/loopapi-client_test.js
rename : browser/extensions/loop/test/shared/mixins_test.js => browser/components/loop/test/shared/mixins_test.js
rename : browser/extensions/loop/test/shared/models_test.js => browser/components/loop/test/shared/models_test.js
rename : browser/extensions/loop/test/shared/otSdkDriver_test.js => browser/components/loop/test/shared/otSdkDriver_test.js
rename : browser/extensions/loop/test/shared/sdk_mock.js => browser/components/loop/test/shared/sdk_mock.js
rename : browser/extensions/loop/test/shared/store_test.js => browser/components/loop/test/shared/store_test.js
rename : browser/extensions/loop/test/shared/test_shared_all.py => browser/components/loop/test/shared/test_shared_all.py
rename : browser/extensions/loop/test/shared/textChatStore_test.js => browser/components/loop/test/shared/textChatStore_test.js
rename : browser/extensions/loop/test/shared/textChatView_test.js => browser/components/loop/test/shared/textChatView_test.js
rename : browser/extensions/loop/test/shared/utils_test.js => browser/components/loop/test/shared/utils_test.js
rename : browser/extensions/loop/test/shared/validate_test.js => browser/components/loop/test/shared/validate_test.js
rename : browser/extensions/loop/test/shared/vendor/chai-3.0.0.js => browser/components/loop/test/shared/vendor/chai-3.0.0.js
rename : browser/extensions/loop/test/shared/vendor/chai-as-promised-5.1.0.js => browser/components/loop/test/shared/vendor/chai-as-promised-5.1.0.js
rename : browser/extensions/loop/test/shared/vendor/mocha-2.2.5.css => browser/components/loop/test/shared/vendor/mocha-2.2.5.css
rename : browser/extensions/loop/test/shared/vendor/mocha-2.2.5.js => browser/components/loop/test/shared/vendor/mocha-2.2.5.js
rename : browser/extensions/loop/test/shared/vendor/sinon-1.16.1.js => browser/components/loop/test/shared/vendor/sinon-1.16.1.js
rename : browser/extensions/loop/test/shared/views_test.js => browser/components/loop/test/shared/views_test.js
rename : browser/extensions/loop/test/standalone/index.html => browser/components/loop/test/standalone/index.html
rename : browser/extensions/loop/test/standalone/standaloneAppStore_test.js => browser/components/loop/test/standalone/standaloneAppStore_test.js
rename : browser/extensions/loop/test/standalone/standaloneMetricsStore_test.js => browser/components/loop/test/standalone/standaloneMetricsStore_test.js
rename : browser/extensions/loop/test/standalone/standaloneMozLoop_test.js => browser/components/loop/test/standalone/standaloneMozLoop_test.js
rename : browser/extensions/loop/test/standalone/standaloneRoomViews_test.js => browser/components/loop/test/standalone/standaloneRoomViews_test.js
rename : browser/extensions/loop/test/standalone/test_standalone_all.py => browser/components/loop/test/standalone/test_standalone_all.py
rename : browser/extensions/loop/test/standalone/webapp_test.js => browser/components/loop/test/standalone/webapp_test.js
rename : browser/extensions/loop/test/ui-showcase/test_ui-showcase.py => browser/components/loop/test/ui-showcase/test_ui-showcase.py
rename : browser/extensions/loop/test/visual-regression/README.md => browser/components/loop/test/visual-regression/README.md
rename : browser/extensions/loop/test/visual-regression/screenshot => browser/components/loop/test/visual-regression/screenshot
rename : browser/extensions/loop/test/xpcshell/.eslintrc => browser/components/loop/test/xpcshell/.eslintrc
rename : browser/extensions/loop/test/xpcshell/head.js => browser/components/loop/test/xpcshell/head.js
rename : browser/extensions/loop/test/xpcshell/test_loopapi_doNotDisturb.js => browser/components/loop/test/xpcshell/test_loopapi_doNotDisturb.js
rename : browser/extensions/loop/test/xpcshell/test_loopapi_internal.js => browser/components/loop/test/xpcshell/test_loopapi_internal.js
rename : browser/extensions/loop/test/xpcshell/test_loopapi_prefs.js => browser/components/loop/test/xpcshell/test_loopapi_prefs.js
rename : browser/extensions/loop/test/xpcshell/test_looppush_initialize.js => browser/components/loop/test/xpcshell/test_looppush_initialize.js
rename : browser/extensions/loop/test/xpcshell/test_looprooms.js => browser/components/loop/test/xpcshell/test_looprooms.js
rename : browser/extensions/loop/test/xpcshell/test_looprooms_encryption_in_fxa.js => browser/components/loop/test/xpcshell/test_looprooms_encryption_in_fxa.js
rename : browser/extensions/loop/test/xpcshell/test_looprooms_first_notification.js => browser/components/loop/test/xpcshell/test_looprooms_first_notification.js
rename : browser/extensions/loop/test/xpcshell/test_looprooms_getall.js => browser/components/loop/test/xpcshell/test_looprooms_getall.js
rename : browser/extensions/loop/test/xpcshell/test_looprooms_upgrade_to_encryption.js => browser/components/loop/test/xpcshell/test_looprooms_upgrade_to_encryption.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_dnd.js => browser/components/loop/test/xpcshell/test_loopservice_dnd.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_encryptionkey.js => browser/components/loop/test/xpcshell/test_loopservice_encryptionkey.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_hawk_errors.js => browser/components/loop/test/xpcshell/test_loopservice_hawk_errors.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_hawk_request.js => browser/components/loop/test/xpcshell/test_loopservice_hawk_request.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_initialize.js => browser/components/loop/test/xpcshell/test_loopservice_initialize.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_locales.js => browser/components/loop/test/xpcshell/test_loopservice_locales.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_loop_prefs.js => browser/components/loop/test/xpcshell/test_loopservice_loop_prefs.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_registration.js => browser/components/loop/test/xpcshell/test_loopservice_registration.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_registration_retry.js => browser/components/loop/test/xpcshell/test_loopservice_registration_retry.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_restart.js => browser/components/loop/test/xpcshell/test_loopservice_restart.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_token_invalid.js => browser/components/loop/test/xpcshell/test_loopservice_token_invalid.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_token_save.js => browser/components/loop/test/xpcshell/test_loopservice_token_save.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_token_send.js => browser/components/loop/test/xpcshell/test_loopservice_token_send.js
rename : browser/extensions/loop/test/xpcshell/test_loopservice_token_validation.js => browser/components/loop/test/xpcshell/test_loopservice_token_validation.js
rename : browser/extensions/loop/test/xpcshell/xpcshell.ini => browser/components/loop/test/xpcshell/xpcshell.ini
rename : browser/extensions/loop/ui/README.md => browser/components/loop/ui/README.md
rename : browser/extensions/loop/ui/fake-l10n.js => browser/components/loop/ui/fake-l10n.js
rename : browser/extensions/loop/ui/fake-mozLoop.js => browser/components/loop/ui/fake-mozLoop.js
rename : browser/extensions/loop/ui/index.html => browser/components/loop/ui/index.html
rename : browser/extensions/loop/ui/react-frame-component.js => browser/components/loop/ui/react-frame-component.js
rename : browser/extensions/loop/ui/sample-img/video-screen-local.png => browser/components/loop/ui/sample-img/video-screen-local.png
rename : browser/extensions/loop/ui/sample-img/video-screen-remote.png => browser/components/loop/ui/sample-img/video-screen-remote.png
rename : browser/extensions/loop/ui/sample-img/video-screen-terminal.png => browser/components/loop/ui/sample-img/video-screen-terminal.png
rename : browser/extensions/loop/ui/ui-showcase.css => browser/components/loop/ui/ui-showcase.css
rename : browser/extensions/loop/ui/ui-showcase.js => browser/components/loop/ui/ui-showcase.js
rename : browser/extensions/loop/ui/ui-showcase.jsx => browser/components/loop/ui/ui-showcase.jsx
rename : browser/extensions/loop/skin/windows/menuPanel.png => browser/themes/linux/loop/menuPanel.png
rename : browser/extensions/loop/skin/windows/menuPanel@2x.png => browser/themes/linux/loop/menuPanel@2x.png
rename : browser/extensions/loop/skin/windows/toolbar-inverted.png => browser/themes/linux/loop/toolbar-inverted.png
rename : browser/extensions/loop/skin/windows/toolbar-inverted@2x.png => browser/themes/linux/loop/toolbar-inverted@2x.png
rename : browser/extensions/loop/skin/linux/toolbar.png => browser/themes/linux/loop/toolbar.png
rename : browser/extensions/loop/skin/linux/toolbar@2x.png => browser/themes/linux/loop/toolbar@2x.png
rename : browser/extensions/loop/skin/osx/menuPanel-yosemite.png => browser/themes/osx/loop/menuPanel-yosemite.png
rename : browser/extensions/loop/skin/osx/menuPanel-yosemite@2x.png => browser/themes/osx/loop/menuPanel-yosemite@2x.png
rename : browser/extensions/loop/skin/osx/menuPanel.png => browser/themes/osx/loop/menuPanel.png
rename : browser/extensions/loop/skin/osx/menuPanel@2x.png => browser/themes/osx/loop/menuPanel@2x.png
rename : browser/extensions/loop/skin/osx/toolbar-inverted.png => browser/themes/osx/loop/toolbar-inverted.png
rename : browser/extensions/loop/skin/osx/toolbar-inverted@2x.png => browser/themes/osx/loop/toolbar-inverted@2x.png
rename : browser/extensions/loop/skin/osx/toolbar-yosemite.png => browser/themes/osx/loop/toolbar-yosemite.png
rename : browser/extensions/loop/skin/osx/toolbar-yosemite@2x.png => browser/themes/osx/loop/toolbar-yosemite@2x.png
rename : browser/extensions/loop/skin/osx/toolbar.png => browser/themes/osx/loop/toolbar.png
rename : browser/extensions/loop/skin/osx/toolbar@2x.png => browser/themes/osx/loop/toolbar@2x.png
rename : browser/extensions/loop/skin/windows/menuPanel-aero.png => browser/themes/windows/loop/menuPanel-aero.png
rename : browser/extensions/loop/skin/windows/menuPanel-aero@2x.png => browser/themes/windows/loop/menuPanel-aero@2x.png
rename : browser/extensions/loop/skin/linux/menuPanel.png => browser/themes/windows/loop/menuPanel.png
rename : browser/extensions/loop/skin/linux/menuPanel@2x.png => browser/themes/windows/loop/menuPanel@2x.png
rename : browser/extensions/loop/skin/windows/toolbar-XP.png => browser/themes/windows/loop/toolbar-XP.png
rename : browser/extensions/loop/skin/windows/toolbar-XP@2x.png => browser/themes/windows/loop/toolbar-XP@2x.png
rename : browser/extensions/loop/skin/windows/toolbar-aero.png => browser/themes/windows/loop/toolbar-aero.png
rename : browser/extensions/loop/skin/windows/toolbar-aero@2x.png => browser/themes/windows/loop/toolbar-aero@2x.png
rename : browser/extensions/loop/skin/linux/toolbar-inverted.png => browser/themes/windows/loop/toolbar-inverted.png
rename : browser/extensions/loop/skin/linux/toolbar-inverted@2x.png => browser/themes/windows/loop/toolbar-inverted@2x.png
rename : browser/extensions/loop/skin/windows/toolbar-lunaSilver.png => browser/themes/windows/loop/toolbar-lunaSilver.png
rename : browser/extensions/loop/skin/windows/toolbar-lunaSilver@2x.png => browser/themes/windows/loop/toolbar-lunaSilver@2x.png
rename : browser/extensions/loop/skin/windows/toolbar-win8.png => browser/themes/windows/loop/toolbar-win8.png
rename : browser/extensions/loop/skin/windows/toolbar-win8@2x.png => browser/themes/windows/loop/toolbar-win8@2x.png
rename : browser/extensions/loop/skin/windows/toolbar.png => browser/themes/windows/loop/toolbar.png
rename : browser/extensions/loop/skin/windows/toolbar@2x.png => browser/themes/windows/loop/toolbar@2x.png
---
.hgignore | 10 +-
browser/app/profile/firefox.js | 36 +
browser/base/content/browser-loop.js | 613 +++++++++++++
browser/base/content/browser.css | 5 +
browser/base/content/browser.js | 4 +
browser/components/about/AboutRedirector.cpp | 4 +-
.../customizableui/CustomizableWidgets.jsm | 36 +
.../loop/.eslintignore | 22 +-
.../{extensions => components}/loop/.eslintrc | 0
.../loop/.eslintrc-gecko | 4 +-
.../loop/.gitignore | 0
.../loop/README.txt | 10 +-
.../{extensions => components}/loop/build-jsx | 4 +-
.../components/loop/content/conversation.html | 48 +
.../loop/content}/css/panel.css | 36 +-
.../loop/content}/js/.eslintrc | 0
.../loop/content}/js/conversation.js | 0
.../loop/content}/js/conversation.jsx | 0
.../loop/content}/js/conversationAppStore.js | 0
.../loop/content}/js/feedbackViews.js | 0
.../loop/content}/js/feedbackViews.jsx | 0
.../loop/content}/js/otconfig.js | 0
.../loop/content}/js/panel.js | 10 +-
.../loop/content}/js/panel.jsx | 10 +-
.../loop/content}/js/roomStore.js | 0
.../loop/content}/js/roomViews.js | 6 +-
.../loop/content}/js/roomViews.jsx | 6 +-
.../loop/content/libs}/l10n.js | 0
browser/components/loop/content/panel.html | 35 +
.../loop/content/shared/README.md | 0
.../loop/content/shared/css/common.css | 0
.../loop/content/shared/css/conversation.css | 40 +-
.../loop/content/shared/css/reset.css | 0
.../loop/content/shared/img/02.png | Bin
.../loop/content/shared/img/02@2x.png | Bin
.../content/shared/img/animated-spinner.svg | 0
.../content/shared/img/audio-call-avatar.svg | 0
.../shared/img/audio-default-16x16@1.5x.png | Bin
.../shared/img/audio-default-16x16@2x.png | Bin
.../loop/content/shared/img/avatars.svg | 0
.../loop/content/shared/img/beta-ribbon.svg | 0
.../shared/img/chatbubble-arrow-left.svg | 0
.../shared/img/chatbubble-arrow-right.svg | 0
.../loop/content/shared/img/check.svg | 0
.../loop/content/shared/img/ellipsis-v.svg | 0
.../shared/img/empty_conversations.svg | 0
.../loop/content/shared/img/empty_search.svg | 0
.../content/shared/img/facemute-14x14.png | Bin
.../content/shared/img/facemute-14x14@2x.png | Bin
.../content/shared/img/firefox-avatar.svg | 0
.../loop/content/shared/img/firefox-logo.png | Bin
.../shared/img/hangup-inverse-14x14.png | Bin
.../shared/img/hangup-inverse-14x14@2x.png | Bin
.../loop/content/shared/img/happy.png | Bin
.../loop/content/shared/img/hello_logo.svg | 0
.../loop/content/shared/img/helloicon.svg | 0
.../loop/content/shared/img/icon_32.png | Bin
.../loop/content/shared/img/icon_64.png | Bin
.../loop/content/shared/img/icons-10x10.svg | 0
.../loop/content/shared/img/icons-14x14.svg | 0
.../loop/content/shared/img/icons-16x16.svg | 0
.../loop/content/shared/img/movistar.png | Bin
.../loop/content/shared/img/movistar@2x.png | Bin
.../content/shared/img/mute-inverse-14x14.png | Bin
.../shared/img/mute-inverse-14x14@2x.png | Bin
.../loop/content/shared/img/pause-12x12.svg | 0
.../loop/content/shared/img/play-12x12.svg | 0
.../loop/content/shared/img/sad.png | Bin
.../shared/img/sad_hello_icon_64x64.svg | 0
.../loop/content/shared/img/spinner.png | Bin
.../loop/content/shared/img/spinner.svg | 0
.../loop/content/shared/img/spinner@2x.png | Bin
.../loop/content/shared/img/stop-12x12.svg | 0
.../content/shared/img/svg}/audio-hover.svg | 0
.../shared/img/svg}/audio-mute-hover.svg | 0
.../content/shared/img/svg}/audio-mute.svg | 0
.../loop/content/shared/img/svg}/audio.svg | 0
.../content/shared/img/svg}/cam_audio-no.svg | 0
.../content/shared/img/svg}/cam_audio.svg | 0
.../content/shared/img/svg}/cam_audio_h.svg | 0
.../loop/content/shared/img/svg}/exit.svg | 0
.../shared/img/svg}/glyph-email-16x16.svg | 0
.../shared/img/svg}/glyph-facebook-16x16.svg | 0
.../shared/img/svg}/glyph-help-16x16.svg | 0
.../shared/img/svg}/glyph-link-16x16.svg | 0
.../shared/img/svg}/glyph-user-16x16.svg | 0
.../img/svg}/media-group-left-hover.svg | 0
.../img/svg}/media-group-right-hover.svg | 0
.../content/shared/img/svg}/media-group.svg | 0
.../shared/img/svg}/settings-hover.svg | 0
.../loop/content/shared/img/svg}/settings.svg | 0
.../shared/img/svg}/sharing-active.svg | 0
.../content/shared/img/svg}/sharing-hover.svg | 0
.../shared/img/svg}/sharing-pending.svg | 0
.../loop/content/shared/img/svg}/sharing.svg | 0
.../content/shared/img/svg}/video-hover.svg | 0
.../shared/img/svg}/video-mute-hover.svg | 0
.../content/shared/img/svg}/video-mute.svg | 0
.../loop/content/shared/img/svg}/video.svg | 0
.../loop/content/shared/img/telefonica.png | Bin
.../loop/content/shared/img/telefonica@2x.png | Bin
.../loop/content/shared/img/vivo.png | Bin
.../loop/content/shared/img/vivo@2x.png | Bin
.../loop/content/shared/js/actions.js | 0
.../loop/content/shared/js/activeRoomStore.js | 0
.../loop/content/shared/js/crypto.js | 2 +-
.../loop/content/shared/js/dispatcher.js | 0
.../content/shared/js/linkifiedTextView.js | 0
.../content/shared/js/linkifiedTextView.jsx | 0
.../loop/content/shared/js/loopapi-client.js | 0
.../loop/content/shared/js/mixins.js | 0
.../loop/content/shared/js/models.js | 0
.../loop/content/shared/js/otSdkDriver.js | 0
.../loop/content/shared/js/store.js | 0
.../loop/content/shared/js/textChatStore.js | 0
.../loop/content/shared/js/textChatView.js | 0
.../loop/content/shared/js/textChatView.jsx | 0
.../loop/content/shared/js/urlRegExps.js | 0
.../loop/content/shared/js/utils.js | 0
.../loop/content/shared/js/validate.js | 0
.../loop/content/shared/js/views.js | 2 +-
.../loop/content/shared/js/views.jsx | 2 +-
.../content/shared/libs}/backbone-1.2.1.js | 0
.../content/shared/libs}/classnames-2.2.0.js | 0
.../loop/content/shared/libs}/lodash-3.9.3.js | 0
.../content/shared/libs}/react-0.13.3-prod.js | 0
.../loop/content/shared/libs}/react-0.13.3.js | 0
.../shared/libs}/sdk-content/css/ot.css | 0
.../images/rtc/access-denied-chrome.png | Bin
.../images/rtc/access-denied-copy-firefox.png | Bin
.../images/rtc/access-denied-firefox.png | Bin
.../images/rtc/access-predenied-chrome.png | Bin
.../images/rtc/access-prompt-chrome.png | Bin
.../images/rtc/audioonly-publisher.png | Bin
.../images/rtc/audioonly-subscriber.png | Bin
.../libs}/sdk-content/images/rtc/buttons.png | Bin
.../libs}/sdk-content/images/rtc/loader.gif | Bin
.../libs}/sdk-content/images/rtc/mic-off.png | Bin
.../libs}/sdk-content/images/rtc/mic-on.png | Bin
.../sdk-content/images/rtc/speaker-off.png | Bin
.../sdk-content/images/rtc/speaker-on.png | Bin
.../sdk-content/js/dynamic_config.min.js | 0
.../loop/content/shared/libs}/sdk.js | 0
.../loop/content/shared/sounds/connected.ogg | Bin
.../loop/content/shared/sounds/connecting.ogg | Bin
.../loop/content/shared/sounds/failure.ogg | Bin
.../loop/content/shared/sounds/message.ogg | Bin
.../loop/content/shared/sounds/ringtone.ogg | Bin
.../content/shared/sounds/room-joined-in.ogg | Bin
.../content/shared/sounds/room-joined.ogg | Bin
.../loop/content/shared/sounds/room-left.ogg | Bin
.../loop/content/shared/sounds/terminated.ogg | Bin
browser/components/loop/jar.mn | 136 +++
.../loop/manifest.ini | 0
browser/components/loop/modules/.eslintrc | 3 +
.../loop}/modules/LoopRooms.jsm | 8 +-
.../loop}/modules/LoopRoomsCache.jsm | 2 +-
.../loop}/modules/MozLoopAPI.jsm | 4 +-
.../loop}/modules/MozLoopPushHandler.jsm | 2 +-
.../loop}/modules/MozLoopService.jsm | 12 +-
.../loop}/modules/MozLoopWorker.js | 0
.../{extensions => components}/loop/moz.build | 21 +-
.../loop/run-all-loop-tests.sh | 4 +-
.../loop/standalone/.gitignore | 0
.../loop/standalone/Makefile | 0
.../loop/standalone/README.md | 0
.../loop/standalone/content/css/webapp.css | 4 +-
.../loop/standalone/content/favicon.ico | Bin
.../standalone/content/img/gum-chrome.svg | 0
.../standalone/content/img/gum-firefox.svg | 0
.../loop/standalone/content/img/gum-opera.svg | 0
.../standalone/content/img/gum-others.svg | 0
.../content/img/hello-logo-text.svg | 0
.../loop/standalone/content/img/logo.png | Bin
.../standalone/content/img/mozilla-logo.svg | 0
.../loop/standalone/content/index.html | 0
.../content/js/standaloneAppStore.js | 0
.../content/js/standaloneMetricsStore.js | 0
.../content/js/standaloneMozLoop.js | 0
.../content/js/standaloneRoomViews.js | 0
.../content/js/standaloneRoomViews.jsx | 0
.../loop/standalone/content/js/webapp.js | 0
.../loop/standalone/content/js/webapp.jsx | 0
.../content/l10n/en-US/loop.properties | 0
.../content/libs/l10n-gaia-02ca67948fe8.js | 0
.../content/libs/l10n-gaia-upstream.txt | 0
.../loop/standalone/content/robots.txt | 0
.../standalone/content/webappEntryPoint.js | 10 +-
.../loop/standalone/package.json | 0
.../loop/standalone/server.js | 4 -
.../loop/standalone/webpack.config.js | 0
.../loop/test/.eslintrc | 0
.../loop/test/coverage/index.html | 0
.../loop/test/desktop-local/.eslintrc | 0
.../loop/test/desktop-local/README.md | 2 +-
.../conversationAppStore_test.js | 0
.../test/desktop-local/conversation_test.js | 0
.../test/desktop-local/feedbackViews_test.js | 0
.../loop/test/desktop-local/index.html | 22 +-
.../loop/test/desktop-local/l10n_test.js | 0
.../loop/test/desktop-local/panel_test.js | 0
.../loop/test/desktop-local/roomStore_test.js | 0
.../loop/test/desktop-local/roomViews_test.js | 0
.../test/desktop-local/test_desktop_all.py | 0
.../loop/test/functional/config.py | 0
.../loop/test/functional/hanging_threads.py | 0
.../loop/test/functional/manifest.ini | 0
.../loop/test/functional/serversetup.py | 0
.../test/functional/test_1_browser_call.py | 0
.../loop/test/index.html | 0
.../loop/test/karma/head.js | 0
.../loop/test/karma/karma.conf.base.js | 0
.../loop/test/karma/karma.coverage.desktop.js | 22 +-
.../karma/karma.coverage.shared_standalone.js | 10 +-
.../loop/test/mochitest/.eslintrc | 0
.../loop/test/mochitest/browser.ini | 0
.../mochitest/browser_LoopRooms_channel.js | 2 +-
.../loop/test/mochitest/browser_fxa_login.js | 2 +-
.../test/mochitest/browser_loop_fxa_server.js | 2 +-
.../browser_mozLoop_appVersionInfo.js | 2 +-
.../test/mochitest/browser_mozLoop_chat.js | 0
.../test/mochitest/browser_mozLoop_context.js | 2 +-
.../browser_mozLoop_sharingListeners.js | 2 +-
.../mochitest/browser_mozLoop_socialShare.js | 2 +-
.../mochitest/browser_mozLoop_telemetry.js | 2 +-
.../test/mochitest/browser_toolbarbutton.js | 2 +-
.../loop/test/mochitest/head.js | 8 +-
.../loop/test/mochitest/loop_fxa.sjs | 0
.../test_loopLinkClicker_channel.html | 0
.../loop/test/package.json | 0
.../loop/test/shared/activeRoomStore_test.js | 0
.../loop/test/shared/crypto_test.js | 0
.../loop/test/shared/dispatcher_test.js | 0
.../loop/test/shared/frontend_tester.py | 0
.../loop/test/shared/index.html | 8 +-
.../test/shared/linkifiedTextView_test.js | 0
.../loop/test/shared/loop_mocha_utils.js | 0
.../loop/test/shared/loopapi-client_test.js | 0
.../loop/test/shared/mixins_test.js | 0
.../loop/test/shared/models_test.js | 0
.../loop/test/shared/otSdkDriver_test.js | 0
.../loop/test/shared/sdk_mock.js | 0
.../loop/test/shared/store_test.js | 0
.../loop/test/shared/test_shared_all.py | 0
.../loop/test/shared/textChatStore_test.js | 0
.../loop/test/shared/textChatView_test.js | 0
.../loop/test/shared/utils_test.js | 0
.../loop/test/shared/validate_test.js | 0
.../loop/test/shared/vendor/chai-3.0.0.js | 0
.../shared/vendor/chai-as-promised-5.1.0.js | 0
.../loop/test/shared/vendor/mocha-2.2.5.css | 0
.../loop/test/shared/vendor/mocha-2.2.5.js | 0
.../loop/test/shared/vendor/sinon-1.16.1.js | 0
.../loop/test/shared/views_test.js | 2 +-
.../loop/test/standalone/index.html | 8 +-
.../standalone/standaloneAppStore_test.js | 0
.../standalone/standaloneMetricsStore_test.js | 0
.../test/standalone/standaloneMozLoop_test.js | 0
.../standalone/standaloneRoomViews_test.js | 0
.../test/standalone/test_standalone_all.py | 0
.../loop/test/standalone/webapp_test.js | 0
.../loop/test/ui-showcase/test_ui-showcase.py | 0
.../loop/test/visual-regression/README.md | 0
.../loop/test/visual-regression/screenshot | 0
.../loop/test/xpcshell/.eslintrc | 4 +-
.../loop/test/xpcshell/head.js | 47 +-
.../xpcshell/test_loopapi_doNotDisturb.js | 2 +-
.../test/xpcshell/test_loopapi_internal.js | 2 +-
.../loop/test/xpcshell/test_loopapi_prefs.js | 2 +-
.../test/xpcshell/test_looppush_initialize.js | 0
.../loop/test/xpcshell/test_looprooms.js | 2 +-
.../test_looprooms_encryption_in_fxa.js | 2 +-
.../test_looprooms_first_notification.js | 2 +-
.../test/xpcshell/test_looprooms_getall.js | 1 +
.../test_looprooms_upgrade_to_encryption.js | 4 +-
.../test/xpcshell/test_loopservice_dnd.js | 0
.../test_loopservice_encryptionkey.js | 0
.../xpcshell/test_loopservice_hawk_errors.js | 2 +-
.../xpcshell/test_loopservice_hawk_request.js | 0
.../xpcshell/test_loopservice_initialize.js | 0
.../test/xpcshell/test_loopservice_locales.js | 0
.../xpcshell/test_loopservice_loop_prefs.js | 0
.../xpcshell/test_loopservice_registration.js | 0
.../test_loopservice_registration_retry.js | 0
.../test/xpcshell/test_loopservice_restart.js | 0
.../test_loopservice_token_invalid.js | 0
.../xpcshell/test_loopservice_token_save.js | 0
.../xpcshell/test_loopservice_token_send.js | 0
.../test_loopservice_token_validation.js | 0
.../loop/test/xpcshell/xpcshell.ini | 0
.../loop/ui/README.md | 2 +-
.../loop/ui/fake-l10n.js | 0
.../loop/ui/fake-mozLoop.js | 0
.../loop/ui/index.html | 20 +-
.../loop/ui/react-frame-component.js | 0
.../loop/ui/sample-img/video-screen-local.png | Bin
.../ui/sample-img/video-screen-remote.png | Bin
.../ui/sample-img/video-screen-terminal.png | Bin
.../loop/ui/ui-showcase.css | 0
.../loop/ui/ui-showcase.js | 0
.../loop/ui/ui-showcase.jsx | 0
browser/components/moz.build | 1 +
.../uitour/test/browser_UITour_loop.js | 4 +-
browser/extensions/loop/bootstrap.js | 849 ------------------
.../extensions/loop/content/modules/.eslintrc | 3 -
.../loop/content/panels/conversation.html | 49 -
.../extensions/loop/content/panels/panel.html | 36 -
.../loop/content/preferences/prefs.js | 33 -
browser/extensions/loop/install.rdf.in | 39 -
browser/extensions/loop/jar.mn | 164 ----
browser/extensions/loop/skin/osx/platform.css | 47 -
browser/extensions/loop/skin/shared/loop.css | 286 ------
.../extensions/loop/skin/windows/platform.css | 26 -
browser/extensions/moz.build | 1 -
browser/installer/package-manifest.in | 1 -
browser/themes/linux/jar.mn | 6 +
.../linux => themes/linux/loop}/menuPanel.png | Bin
.../linux/loop}/menuPanel@2x.png | Bin
.../linux/loop}/toolbar-inverted.png | Bin
.../linux/loop}/toolbar-inverted@2x.png | Bin
.../linux => themes/linux/loop}/toolbar.png | Bin
.../linux/loop}/toolbar@2x.png | Bin
browser/themes/osx/browser.css | 34 +
browser/themes/osx/jar.mn | 14 +
.../osx/loop}/menuPanel-yosemite.png | Bin
.../osx/loop}/menuPanel-yosemite@2x.png | Bin
.../osx => themes/osx/loop}/menuPanel.png | Bin
.../osx => themes/osx/loop}/menuPanel@2x.png | Bin
.../osx/loop}/toolbar-inverted.png | Bin
.../osx/loop}/toolbar-inverted@2x.png | Bin
.../osx/loop}/toolbar-yosemite.png | Bin
.../osx/loop}/toolbar-yosemite@2x.png | Bin
.../skin/osx => themes/osx/loop}/toolbar.png | Bin
.../osx => themes/osx/loop}/toolbar@2x.png | Bin
browser/themes/shared/browser.inc | 2 +-
browser/themes/shared/menupanel.inc.css | 72 ++
.../themes/shared/notification-icons.inc.css | 80 ++
browser/themes/shared/social/chat.inc.css | 35 +
browser/themes/shared/toolbarbuttons.inc.css | 68 ++
browser/themes/windows/browser.css | 10 +
browser/themes/windows/jar.mn | 31 +
.../windows/loop}/menuPanel-aero.png | Bin
.../windows/loop}/menuPanel-aero@2x.png | Bin
.../windows/loop}/menuPanel.png | Bin
.../windows/loop}/menuPanel@2x.png | Bin
.../windows/loop}/toolbar-XP.png | Bin
.../windows/loop}/toolbar-XP@2x.png | Bin
.../windows/loop}/toolbar-aero.png | Bin
.../windows/loop}/toolbar-aero@2x.png | Bin
.../windows/loop}/toolbar-inverted.png | Bin
.../windows/loop}/toolbar-inverted@2x.png | Bin
.../windows/loop}/toolbar-lunaSilver.png | Bin
.../windows/loop}/toolbar-lunaSilver@2x.png | Bin
.../windows/loop}/toolbar-win8.png | Bin
.../windows/loop}/toolbar-win8@2x.png | Bin
.../windows/loop}/toolbar.png | Bin
.../windows/loop}/toolbar@2x.png | Bin
.../client/marionette/tests/unit-tests.ini | 2 +-
testing/profiles/prefs_general.js | 2 +-
359 files changed, 1461 insertions(+), 1781 deletions(-)
create mode 100644 browser/base/content/browser-loop.js
rename browser/{extensions => components}/loop/.eslintignore (62%)
rename browser/{extensions => components}/loop/.eslintrc (100%)
rename browser/{extensions => components}/loop/.eslintrc-gecko (96%)
rename browser/{extensions => components}/loop/.gitignore (100%)
rename browser/{extensions => components}/loop/README.txt (92%)
rename browser/{extensions => components}/loop/build-jsx (98%)
create mode 100644 browser/components/loop/content/conversation.html
rename browser/{extensions/loop/content/panels => components/loop/content}/css/panel.css (92%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/.eslintrc (100%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/conversation.js (100%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/conversation.jsx (100%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/conversationAppStore.js (100%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/feedbackViews.js (100%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/feedbackViews.jsx (100%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/otconfig.js (100%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/panel.js (98%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/panel.jsx (99%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/roomStore.js (100%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/roomViews.js (99%)
rename browser/{extensions/loop/content/panels => components/loop/content}/js/roomViews.jsx (99%)
rename browser/{extensions/loop/content/panels/vendor => components/loop/content/libs}/l10n.js (100%)
create mode 100644 browser/components/loop/content/panel.html
rename browser/{extensions => components}/loop/content/shared/README.md (100%)
rename browser/{extensions => components}/loop/content/shared/css/common.css (100%)
rename browser/{extensions => components}/loop/content/shared/css/conversation.css (95%)
rename browser/{extensions => components}/loop/content/shared/css/reset.css (100%)
rename browser/{extensions => components}/loop/content/shared/img/02.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/02@2x.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/animated-spinner.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/audio-call-avatar.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/audio-default-16x16@1.5x.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/audio-default-16x16@2x.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/avatars.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/beta-ribbon.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/chatbubble-arrow-left.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/chatbubble-arrow-right.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/check.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/ellipsis-v.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/empty_conversations.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/empty_search.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/facemute-14x14.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/facemute-14x14@2x.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/firefox-avatar.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/firefox-logo.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/hangup-inverse-14x14.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/hangup-inverse-14x14@2x.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/happy.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/hello_logo.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/helloicon.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/icon_32.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/icon_64.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/icons-10x10.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/icons-14x14.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/icons-16x16.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/movistar.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/movistar@2x.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/mute-inverse-14x14.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/mute-inverse-14x14@2x.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/pause-12x12.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/play-12x12.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/sad.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/sad_hello_icon_64x64.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/spinner.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/spinner.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/spinner@2x.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/stop-12x12.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/audio-hover.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/audio-mute-hover.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/audio-mute.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/audio.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/cam_audio-no.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/cam_audio.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/cam_audio_h.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/exit.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/glyph-email-16x16.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/glyph-facebook-16x16.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/glyph-help-16x16.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/glyph-link-16x16.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/glyph-user-16x16.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/media-group-left-hover.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/media-group-right-hover.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/media-group.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/settings-hover.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/settings.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/sharing-active.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/sharing-hover.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/sharing-pending.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/sharing.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/video-hover.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/video-mute-hover.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/video-mute.svg (100%)
rename browser/{extensions/loop/content/shared/img => components/loop/content/shared/img/svg}/video.svg (100%)
rename browser/{extensions => components}/loop/content/shared/img/telefonica.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/telefonica@2x.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/vivo.png (100%)
rename browser/{extensions => components}/loop/content/shared/img/vivo@2x.png (100%)
rename browser/{extensions => components}/loop/content/shared/js/actions.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/activeRoomStore.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/crypto.js (98%)
rename browser/{extensions => components}/loop/content/shared/js/dispatcher.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/linkifiedTextView.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/linkifiedTextView.jsx (100%)
rename browser/{extensions => components}/loop/content/shared/js/loopapi-client.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/mixins.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/models.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/otSdkDriver.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/store.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/textChatStore.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/textChatView.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/textChatView.jsx (100%)
rename browser/{extensions => components}/loop/content/shared/js/urlRegExps.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/utils.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/validate.js (100%)
rename browser/{extensions => components}/loop/content/shared/js/views.js (99%)
rename browser/{extensions => components}/loop/content/shared/js/views.jsx (99%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/backbone-1.2.1.js (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/classnames-2.2.0.js (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/lodash-3.9.3.js (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/react-0.13.3-prod.js (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/react-0.13.3.js (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/css/ot.css (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/access-denied-chrome.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/access-denied-copy-firefox.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/access-denied-firefox.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/access-predenied-chrome.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/access-prompt-chrome.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/audioonly-publisher.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/audioonly-subscriber.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/buttons.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/loader.gif (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/mic-off.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/mic-on.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/speaker-off.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/images/rtc/speaker-on.png (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk-content/js/dynamic_config.min.js (100%)
rename browser/{extensions/loop/content/shared/vendor => components/loop/content/shared/libs}/sdk.js (100%)
rename browser/{extensions => components}/loop/content/shared/sounds/connected.ogg (100%)
rename browser/{extensions => components}/loop/content/shared/sounds/connecting.ogg (100%)
rename browser/{extensions => components}/loop/content/shared/sounds/failure.ogg (100%)
rename browser/{extensions => components}/loop/content/shared/sounds/message.ogg (100%)
rename browser/{extensions => components}/loop/content/shared/sounds/ringtone.ogg (100%)
rename browser/{extensions => components}/loop/content/shared/sounds/room-joined-in.ogg (100%)
rename browser/{extensions => components}/loop/content/shared/sounds/room-joined.ogg (100%)
rename browser/{extensions => components}/loop/content/shared/sounds/room-left.ogg (100%)
rename browser/{extensions => components}/loop/content/shared/sounds/terminated.ogg (100%)
create mode 100644 browser/components/loop/jar.mn
rename browser/{extensions => components}/loop/manifest.ini (100%)
create mode 100644 browser/components/loop/modules/.eslintrc
rename browser/{extensions/loop/content => components/loop}/modules/LoopRooms.jsm (99%)
rename browser/{extensions/loop/content => components/loop}/modules/LoopRoomsCache.jsm (98%)
rename browser/{extensions/loop/content => components/loop}/modules/MozLoopAPI.jsm (99%)
rename browser/{extensions/loop/content => components/loop}/modules/MozLoopPushHandler.jsm (99%)
rename browser/{extensions/loop/content => components/loop}/modules/MozLoopService.jsm (99%)
rename browser/{extensions/loop/content => components/loop}/modules/MozLoopWorker.js (100%)
rename browser/{extensions => components}/loop/moz.build (64%)
rename browser/{extensions => components}/loop/run-all-loop-tests.sh (94%)
rename browser/{extensions => components}/loop/standalone/.gitignore (100%)
rename browser/{extensions => components}/loop/standalone/Makefile (100%)
rename browser/{extensions => components}/loop/standalone/README.md (100%)
rename browser/{extensions => components}/loop/standalone/content/css/webapp.css (97%)
rename browser/{extensions => components}/loop/standalone/content/favicon.ico (100%)
rename browser/{extensions => components}/loop/standalone/content/img/gum-chrome.svg (100%)
rename browser/{extensions => components}/loop/standalone/content/img/gum-firefox.svg (100%)
rename browser/{extensions => components}/loop/standalone/content/img/gum-opera.svg (100%)
rename browser/{extensions => components}/loop/standalone/content/img/gum-others.svg (100%)
rename browser/{extensions => components}/loop/standalone/content/img/hello-logo-text.svg (100%)
rename browser/{extensions => components}/loop/standalone/content/img/logo.png (100%)
rename browser/{extensions => components}/loop/standalone/content/img/mozilla-logo.svg (100%)
rename browser/{extensions => components}/loop/standalone/content/index.html (100%)
rename browser/{extensions => components}/loop/standalone/content/js/standaloneAppStore.js (100%)
rename browser/{extensions => components}/loop/standalone/content/js/standaloneMetricsStore.js (100%)
rename browser/{extensions => components}/loop/standalone/content/js/standaloneMozLoop.js (100%)
rename browser/{extensions => components}/loop/standalone/content/js/standaloneRoomViews.js (100%)
rename browser/{extensions => components}/loop/standalone/content/js/standaloneRoomViews.jsx (100%)
rename browser/{extensions => components}/loop/standalone/content/js/webapp.js (100%)
rename browser/{extensions => components}/loop/standalone/content/js/webapp.jsx (100%)
rename browser/{extensions => components}/loop/standalone/content/l10n/en-US/loop.properties (100%)
rename browser/{extensions => components}/loop/standalone/content/libs/l10n-gaia-02ca67948fe8.js (100%)
rename browser/{extensions => components}/loop/standalone/content/libs/l10n-gaia-upstream.txt (100%)
rename browser/{extensions => components}/loop/standalone/content/robots.txt (100%)
rename browser/{extensions => components}/loop/standalone/content/webappEntryPoint.js (93%)
rename browser/{extensions => components}/loop/standalone/package.json (100%)
rename browser/{extensions => components}/loop/standalone/server.js (95%)
rename browser/{extensions => components}/loop/standalone/webpack.config.js (100%)
rename browser/{extensions => components}/loop/test/.eslintrc (100%)
rename browser/{extensions => components}/loop/test/coverage/index.html (100%)
rename browser/{extensions => components}/loop/test/desktop-local/.eslintrc (100%)
rename browser/{extensions => components}/loop/test/desktop-local/README.md (89%)
rename browser/{extensions => components}/loop/test/desktop-local/conversationAppStore_test.js (100%)
rename browser/{extensions => components}/loop/test/desktop-local/conversation_test.js (100%)
rename browser/{extensions => components}/loop/test/desktop-local/feedbackViews_test.js (100%)
rename browser/{extensions => components}/loop/test/desktop-local/index.html (77%)
rename browser/{extensions => components}/loop/test/desktop-local/l10n_test.js (100%)
rename browser/{extensions => components}/loop/test/desktop-local/panel_test.js (100%)
rename browser/{extensions => components}/loop/test/desktop-local/roomStore_test.js (100%)
rename browser/{extensions => components}/loop/test/desktop-local/roomViews_test.js (100%)
rename browser/{extensions => components}/loop/test/desktop-local/test_desktop_all.py (100%)
rename browser/{extensions => components}/loop/test/functional/config.py (100%)
rename browser/{extensions => components}/loop/test/functional/hanging_threads.py (100%)
rename browser/{extensions => components}/loop/test/functional/manifest.ini (100%)
rename browser/{extensions => components}/loop/test/functional/serversetup.py (100%)
rename browser/{extensions => components}/loop/test/functional/test_1_browser_call.py (100%)
rename browser/{extensions => components}/loop/test/index.html (100%)
rename browser/{extensions => components}/loop/test/karma/head.js (100%)
rename browser/{extensions => components}/loop/test/karma/karma.conf.base.js (100%)
rename browser/{extensions => components}/loop/test/karma/karma.coverage.desktop.js (75%)
rename browser/{extensions => components}/loop/test/karma/karma.coverage.shared_standalone.js (89%)
rename browser/{extensions => components}/loop/test/mochitest/.eslintrc (100%)
rename browser/{extensions => components}/loop/test/mochitest/browser.ini (100%)
rename browser/{extensions => components}/loop/test/mochitest/browser_LoopRooms_channel.js (98%)
rename browser/{extensions => components}/loop/test/mochitest/browser_fxa_login.js (99%)
rename browser/{extensions => components}/loop/test/mochitest/browser_loop_fxa_server.js (97%)
rename browser/{extensions => components}/loop/test/mochitest/browser_mozLoop_appVersionInfo.js (92%)
rename browser/{extensions => components}/loop/test/mochitest/browser_mozLoop_chat.js (100%)
rename browser/{extensions => components}/loop/test/mochitest/browser_mozLoop_context.js (96%)
rename browser/{extensions => components}/loop/test/mochitest/browser_mozLoop_sharingListeners.js (98%)
rename browser/{extensions => components}/loop/test/mochitest/browser_mozLoop_socialShare.js (98%)
rename browser/{extensions => components}/loop/test/mochitest/browser_mozLoop_telemetry.js (98%)
rename browser/{extensions => components}/loop/test/mochitest/browser_toolbarbutton.js (99%)
rename browser/{extensions => components}/loop/test/mochitest/head.js (96%)
rename browser/{extensions => components}/loop/test/mochitest/loop_fxa.sjs (100%)
rename browser/{extensions => components}/loop/test/mochitest/test_loopLinkClicker_channel.html (100%)
rename browser/{extensions => components}/loop/test/package.json (100%)
rename browser/{extensions => components}/loop/test/shared/activeRoomStore_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/crypto_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/dispatcher_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/frontend_tester.py (100%)
rename browser/{extensions => components}/loop/test/shared/index.html (91%)
rename browser/{extensions => components}/loop/test/shared/linkifiedTextView_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/loop_mocha_utils.js (100%)
rename browser/{extensions => components}/loop/test/shared/loopapi-client_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/mixins_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/models_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/otSdkDriver_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/sdk_mock.js (100%)
rename browser/{extensions => components}/loop/test/shared/store_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/test_shared_all.py (100%)
rename browser/{extensions => components}/loop/test/shared/textChatStore_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/textChatView_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/utils_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/validate_test.js (100%)
rename browser/{extensions => components}/loop/test/shared/vendor/chai-3.0.0.js (100%)
rename browser/{extensions => components}/loop/test/shared/vendor/chai-as-promised-5.1.0.js (100%)
rename browser/{extensions => components}/loop/test/shared/vendor/mocha-2.2.5.css (100%)
rename browser/{extensions => components}/loop/test/shared/vendor/mocha-2.2.5.js (100%)
rename browser/{extensions => components}/loop/test/shared/vendor/sinon-1.16.1.js (100%)
rename browser/{extensions => components}/loop/test/shared/views_test.js (99%)
rename browser/{extensions => components}/loop/test/standalone/index.html (90%)
rename browser/{extensions => components}/loop/test/standalone/standaloneAppStore_test.js (100%)
rename browser/{extensions => components}/loop/test/standalone/standaloneMetricsStore_test.js (100%)
rename browser/{extensions => components}/loop/test/standalone/standaloneMozLoop_test.js (100%)
rename browser/{extensions => components}/loop/test/standalone/standaloneRoomViews_test.js (100%)
rename browser/{extensions => components}/loop/test/standalone/test_standalone_all.py (100%)
rename browser/{extensions => components}/loop/test/standalone/webapp_test.js (100%)
rename browser/{extensions => components}/loop/test/ui-showcase/test_ui-showcase.py (100%)
rename browser/{extensions => components}/loop/test/visual-regression/README.md (100%)
rename browser/{extensions => components}/loop/test/visual-regression/screenshot (100%)
rename browser/{extensions => components}/loop/test/xpcshell/.eslintrc (91%)
rename browser/{extensions => components}/loop/test/xpcshell/head.js (79%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopapi_doNotDisturb.js (89%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopapi_internal.js (96%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopapi_prefs.js (92%)
rename browser/{extensions => components}/loop/test/xpcshell/test_looppush_initialize.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_looprooms.js (99%)
rename browser/{extensions => components}/loop/test/xpcshell/test_looprooms_encryption_in_fxa.js (98%)
rename browser/{extensions => components}/loop/test/xpcshell/test_looprooms_first_notification.js (98%)
rename browser/{extensions => components}/loop/test/xpcshell/test_looprooms_getall.js (98%)
rename browser/{extensions => components}/loop/test/xpcshell/test_looprooms_upgrade_to_encryption.js (95%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_dnd.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_encryptionkey.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_hawk_errors.js (98%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_hawk_request.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_initialize.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_locales.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_loop_prefs.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_registration.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_registration_retry.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_restart.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_token_invalid.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_token_save.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_token_send.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/test_loopservice_token_validation.js (100%)
rename browser/{extensions => components}/loop/test/xpcshell/xpcshell.ini (100%)
rename browser/{extensions => components}/loop/ui/README.md (82%)
rename browser/{extensions => components}/loop/ui/fake-l10n.js (100%)
rename browser/{extensions => components}/loop/ui/fake-mozLoop.js (100%)
rename browser/{extensions => components}/loop/ui/index.html (78%)
rename browser/{extensions => components}/loop/ui/react-frame-component.js (100%)
rename browser/{extensions => components}/loop/ui/sample-img/video-screen-local.png (100%)
rename browser/{extensions => components}/loop/ui/sample-img/video-screen-remote.png (100%)
rename browser/{extensions => components}/loop/ui/sample-img/video-screen-terminal.png (100%)
rename browser/{extensions => components}/loop/ui/ui-showcase.css (100%)
rename browser/{extensions => components}/loop/ui/ui-showcase.js (100%)
rename browser/{extensions => components}/loop/ui/ui-showcase.jsx (100%)
delete mode 100644 browser/extensions/loop/bootstrap.js
delete mode 100644 browser/extensions/loop/content/modules/.eslintrc
delete mode 100644 browser/extensions/loop/content/panels/conversation.html
delete mode 100644 browser/extensions/loop/content/panels/panel.html
delete mode 100644 browser/extensions/loop/content/preferences/prefs.js
delete mode 100644 browser/extensions/loop/install.rdf.in
delete mode 100644 browser/extensions/loop/jar.mn
delete mode 100644 browser/extensions/loop/skin/osx/platform.css
delete mode 100644 browser/extensions/loop/skin/shared/loop.css
delete mode 100644 browser/extensions/loop/skin/windows/platform.css
rename browser/{extensions/loop/skin/linux => themes/linux/loop}/menuPanel.png (100%)
rename browser/{extensions/loop/skin/linux => themes/linux/loop}/menuPanel@2x.png (100%)
rename browser/{extensions/loop/skin/linux => themes/linux/loop}/toolbar-inverted.png (100%)
rename browser/{extensions/loop/skin/linux => themes/linux/loop}/toolbar-inverted@2x.png (100%)
rename browser/{extensions/loop/skin/linux => themes/linux/loop}/toolbar.png (100%)
rename browser/{extensions/loop/skin/linux => themes/linux/loop}/toolbar@2x.png (100%)
rename browser/{extensions/loop/skin/osx => themes/osx/loop}/menuPanel-yosemite.png (100%)
rename browser/{extensions/loop/skin/osx => themes/osx/loop}/menuPanel-yosemite@2x.png (100%)
rename browser/{extensions/loop/skin/osx => themes/osx/loop}/menuPanel.png (100%)
rename browser/{extensions/loop/skin/osx => themes/osx/loop}/menuPanel@2x.png (100%)
rename browser/{extensions/loop/skin/osx => themes/osx/loop}/toolbar-inverted.png (100%)
rename browser/{extensions/loop/skin/osx => themes/osx/loop}/toolbar-inverted@2x.png (100%)
rename browser/{extensions/loop/skin/osx => themes/osx/loop}/toolbar-yosemite.png (100%)
rename browser/{extensions/loop/skin/osx => themes/osx/loop}/toolbar-yosemite@2x.png (100%)
rename browser/{extensions/loop/skin/osx => themes/osx/loop}/toolbar.png (100%)
rename browser/{extensions/loop/skin/osx => themes/osx/loop}/toolbar@2x.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/menuPanel-aero.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/menuPanel-aero@2x.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/menuPanel.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/menuPanel@2x.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar-XP.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar-XP@2x.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar-aero.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar-aero@2x.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar-inverted.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar-inverted@2x.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar-lunaSilver.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar-lunaSilver@2x.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar-win8.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar-win8@2x.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar.png (100%)
rename browser/{extensions/loop/skin/windows => themes/windows/loop}/toolbar@2x.png (100%)
diff --git a/.hgignore b/.hgignore
index 0682c531c12e..28f5bf8b43cc 100644
--- a/.hgignore
+++ b/.hgignore
@@ -80,15 +80,9 @@ GRTAGS
GSYMS
GPATH
-# Various items for Loop
+# Unit tests for Loop
^browser/components/loop/standalone/content/config\.js$
-^browser/extensions/loop/.*/node_modules/
-^browser/extensions/loop/.*\.module-cache
-^browser/extensions/loop/test/coverage/desktop
-^browser/extensions/loop/test/coverage/shared_standalone
-^browser/extensions/loop/test/visual-regression/diff
-^browser/extensions/loop/test/visual-regression/new
-^browser/extensions/loop/test/visual-regression/refs
+^browser/components/loop/standalone/node_modules/
# Git clone directory for updating web-platform-tests
^testing/web-platform/sync/
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index fbdfe7bba396..a2136ae41269 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -1376,6 +1376,42 @@ pref("shumway.disabled", true);
// (This is intentionally on the high side; see bug 746055.)
pref("image.mem.max_decoded_image_kb", 256000);
+pref("loop.enabled", true);
+pref("loop.textChat.enabled", true);
+pref("loop.server", "https://loop.services.mozilla.com/v0");
+pref("loop.linkClicker.url", "https://hello.firefox.com/");
+pref("loop.gettingStarted.seen", false);
+pref("loop.gettingStarted.url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/hello/start/");
+pref("loop.gettingStarted.resumeOnFirstJoin", false);
+pref("loop.learnMoreUrl", "https://www.firefox.com/hello/");
+pref("loop.legal.ToS_url", "https://www.mozilla.org/about/legal/terms/firefox-hello/");
+pref("loop.legal.privacy_url", "https://www.mozilla.org/privacy/firefox-hello/");
+pref("loop.do_not_disturb", false);
+pref("loop.ringtone", "chrome://browser/content/loop/shared/sounds/ringtone.ogg");
+pref("loop.retry_delay.start", 60000);
+pref("loop.retry_delay.limit", 300000);
+pref("loop.ping.interval", 1800000);
+pref("loop.ping.timeout", 10000);
+pref("loop.feedback.baseUrl", "https://input.mozilla.org/api/v1/feedback");
+pref("loop.feedback.product", "Loop");
+pref("loop.debug.loglevel", "Error");
+pref("loop.debug.dispatcher", false);
+pref("loop.debug.sdk", false);
+pref("loop.debug.twoWayMediaTelemetry", false);
+pref("loop.feedback.dateLastSeenSec", 0);
+pref("loop.feedback.periodSec", 15770000); // 6 months.
+pref("loop.feedback.formURL", "https://www.mozilla.org/firefox/hello/npssurvey/");
+pref("loop.feedback.manualFormURL", "https://www.mozilla.org/firefox/hello/feedbacksurvey/");
+#ifdef DEBUG
+pref("loop.CSP", "default-src 'self' about: file: chrome: http://localhost:*; img-src * data:; font-src 'none'; connect-src wss://*.tokbox.com https://*.opentok.com https://*.tokbox.com wss://*.mozilla.com https://*.mozilla.org wss://*.mozaws.net http://localhost:* ws://localhost:*; media-src blob:");
+#else
+pref("loop.CSP", "default-src 'self' about: file: chrome:; img-src * data:; font-src 'none'; connect-src wss://*.tokbox.com https://*.opentok.com https://*.tokbox.com wss://*.mozilla.com https://*.mozilla.org wss://*.mozaws.net; media-src blob:");
+#endif
+pref("loop.fxa_oauth.tokendata", "");
+pref("loop.fxa_oauth.profile", "");
+pref("loop.support_url", "https://support.mozilla.org/kb/group-conversations-firefox-hello-webrtc");
+pref("loop.browserSharing.showInfoBar", true);
+
pref("social.sidebar.unload_timeout_ms", 10000);
// Activation from inside of share panel is possible if activationPanelEnabled
diff --git a/browser/base/content/browser-loop.js b/browser/base/content/browser-loop.js
new file mode 100644
index 000000000000..40e48eccc4b0
--- /dev/null
+++ b/browser/base/content/browser-loop.js
@@ -0,0 +1,613 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+// the "exported" symbols
+var LoopUI;
+
+(function() {
+ const kNSXUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+ const kBrowserSharingNotificationId = "loop-sharing-notification";
+ const kPrefBrowserSharingInfoBar = "browserSharing.showInfoBar";
+
+ LoopUI = {
+ /**
+ * @var {XULWidgetSingleWrapper} toolbarButton Getter for the Loop toolbarbutton
+ * instance for this window.
+ */
+ get toolbarButton() {
+ delete this.toolbarButton;
+ return this.toolbarButton = CustomizableUI.getWidget("loop-button").forWindow(window);
+ },
+
+ /**
+ * @var {XULElement} panel Getter for the Loop panel element.
+ */
+ get panel() {
+ delete this.panel;
+ return this.panel = document.getElementById("loop-notification-panel");
+ },
+
+ /**
+ * @var {XULElement|null} browser Getter for the Loop panel browser element.
+ * Will be NULL if the panel hasn't loaded yet.
+ */
+ get browser() {
+ let browser = document.querySelector("#loop-notification-panel > #loop-panel-iframe");
+ if (browser) {
+ delete this.browser;
+ this.browser = browser;
+ }
+ return browser;
+ },
+
+ /**
+ * @var {String|null} selectedTab Getter for the name of the currently selected
+ * tab inside the Loop panel. Will be NULL if
+ * the panel hasn't loaded yet.
+ */
+ get selectedTab() {
+ if (!this.browser) {
+ return null;
+ }
+
+ let selectedTab = this.browser.contentDocument.querySelector(".tab-view > .selected");
+ return selectedTab && selectedTab.getAttribute("data-tab-name");
+ },
+
+ /**
+ * @return {Promise}
+ */
+ promiseDocumentVisible(aDocument) {
+ if (!aDocument.hidden) {
+ return Promise.resolve(aDocument);
+ }
+
+ return new Promise((resolve) => {
+ aDocument.addEventListener("visibilitychange", function onVisibilityChanged() {
+ aDocument.removeEventListener("visibilitychange", onVisibilityChanged);
+ resolve(aDocument);
+ });
+ });
+ },
+
+ /**
+ * Toggle between opening or hiding the Loop panel.
+ *
+ * @param {DOMEvent} [event] Optional event that triggered the call to this
+ * function.
+ * @param {String} [tabId] Optional name of the tab to select after the panel
+ * has opened. Does nothing when the panel is hidden.
+ * @return {Promise}
+ */
+ togglePanel: function(event, tabId = null) {
+ if (!this.panel) {
+ // We're on the hidden window! What fun!
+ let obs = win => {
+ Services.obs.removeObserver(obs, "browser-delayed-startup-finished");
+ win.LoopUI.togglePanel(event, tabId);
+ };
+ Services.obs.addObserver(obs, "browser-delayed-startup-finished", false);
+ return OpenBrowserWindow();
+ }
+ if (this.panel.state == "open") {
+ return new Promise(resolve => {
+ this.panel.hidePopup();
+ resolve();
+ });
+ }
+
+ return this.openCallPanel(event, tabId).then(doc => {
+ let fm = Services.focus;
+ fm.moveFocus(doc.defaultView, null, fm.MOVEFOCUS_FIRST, fm.FLAG_NOSCROLL);
+ }).catch(err => {
+ Cu.reportError(x);
+ });
+ },
+
+ /**
+ * Opens the panel for Loop and sizes it appropriately.
+ *
+ * @param {event} event The event opening the panel, used to anchor
+ * the panel to the button which triggers it.
+ * @param {String} [tabId] Identifier of the tab to select when the panel is
+ * opened. Example: 'rooms', 'contacts', etc.
+ * @return {Promise}
+ */
+ openCallPanel: function(event, tabId = null) {
+ return new Promise((resolve) => {
+ let callback = iframe => {
+ // Helper function to show a specific tab view in the panel.
+ function showTab() {
+ if (!tabId) {
+ resolve(LoopUI.promiseDocumentVisible(iframe.contentDocument));
+ return;
+ }
+
+ let win = iframe.contentWindow;
+ let ev = new win.CustomEvent("UIAction", Cu.cloneInto({
+ detail: {
+ action: "selectTab",
+ tab: tabId
+ }
+ }, win));
+ win.dispatchEvent(ev);
+ resolve(LoopUI.promiseDocumentVisible(iframe.contentDocument));
+ }
+
+ // If the panel has been opened and initialized before, we can skip waiting
+ // for the content to load - because it's already there.
+ if (("contentWindow" in iframe) && iframe.contentWindow.document.readyState == "complete") {
+ showTab();
+ return;
+ }
+
+ let documentDOMLoaded = () => {
+ iframe.removeEventListener("DOMContentLoaded", documentDOMLoaded, true);
+ // Handle window.close correctly on the panel.
+ this.hookWindowCloseForPanelClose(iframe.contentWindow);
+ iframe.contentWindow.addEventListener("loopPanelInitialized", function loopPanelInitialized() {
+ iframe.contentWindow.removeEventListener("loopPanelInitialized",
+ loopPanelInitialized);
+ showTab();
+ });
+ };
+ iframe.addEventListener("DOMContentLoaded", documentDOMLoaded, true);
+ };
+
+ // Used to clear the temporary "login" state from the button.
+ Services.obs.notifyObservers(null, "loop-status-changed", null);
+
+ this.shouldResumeTour().then((resume) => {
+ if (resume) {
+ // Assume the conversation with the visitor wasn't open since we would
+ // have resumed the tour as soon as the visitor joined if it was (and
+ // the pref would have been set to false already.
+ this.MozLoopService.resumeTour("waiting");
+ resolve();
+ return;
+ }
+
+ this.LoopAPI.initialize();
+
+ let anchor = event ? event.target : this.toolbarButton.anchor;
+ let setHeight = 410;
+ if (gBrowser.selectedBrowser.getAttribute("remote") === "true") {
+ setHeight = 262;
+ }
+ this.PanelFrame.showPopup(window, anchor,
+ "loop", null, "about:looppanel",
+ // Loop wants a fixed size for the panel. This also stops it dynamically resizing.
+ { width: 330, height: setHeight },
+ callback);
+ });
+ });
+ },
+
+ /**
+ * Method to know whether actions to open the panel should instead resume the tour.
+ *
+ * We need the panel to be opened via UITour so that it gets @noautohide.
+ *
+ * @return {Promise} resolving with a {Boolean} of whether the tour should be resumed instead of
+ * opening the panel.
+ */
+ shouldResumeTour: Task.async(function* () {
+ // Resume the FTU tour if this is the first time a room was joined by
+ // someone else since the tour.
+ if (!Services.prefs.getBoolPref("loop.gettingStarted.resumeOnFirstJoin")) {
+ return false;
+ }
+
+ if (!this.LoopRooms.participantsCount) {
+ // Nobody is in the rooms
+ return false;
+ }
+
+ let roomsWithNonOwners = yield this.roomsWithNonOwners();
+ if (!roomsWithNonOwners.length) {
+ // We were the only one in a room but we want to know about someone else joining.
+ return false;
+ }
+
+ return true;
+ }),
+
+ /**
+ * @return {Promise} resolved with an array of Rooms with participants (excluding owners)
+ */
+ roomsWithNonOwners: function() {
+ return new Promise(resolve => {
+ this.LoopRooms.getAll((error, rooms) => {
+ let roomsWithNonOwners = [];
+ for (let room of rooms) {
+ if (!("participants" in room)) {
+ continue;
+ }
+ let numNonOwners = room.participants.filter(participant => !participant.owner).length;
+ if (!numNonOwners) {
+ continue;
+ }
+ roomsWithNonOwners.push(room);
+ }
+ resolve(roomsWithNonOwners);
+ });
+ });
+ },
+
+ /**
+ * Triggers the initialization of the loop service. Called by
+ * delayedStartup.
+ */
+ init: function() {
+ // Add observer notifications before the service is initialized
+ Services.obs.addObserver(this, "loop-status-changed", false);
+
+ // This is a promise for test purposes, but we don't want to be logging
+ // expected errors to the console, so we catch them here.
+ this.MozLoopService.initialize().catch(ex => {
+ if (!ex.message ||
+ (!ex.message.contains("not enabled") &&
+ !ex.message.contains("not needed"))) {
+ console.error(ex);
+ }
+ });
+ this.updateToolbarState();
+ },
+
+ uninit: function() {
+ Services.obs.removeObserver(this, "loop-status-changed");
+ },
+
+ // Implements nsIObserver
+ observe: function(subject, topic, data) {
+ if (topic != "loop-status-changed") {
+ return;
+ }
+ this.updateToolbarState(data);
+ },
+
+ /**
+ * Updates the toolbar/menu-button state to reflect Loop status.
+ *
+ * @param {string} [aReason] Some states are only shown if
+ * a related reason is provided.
+ *
+ * aReason="login": Used after a login is completed
+ * successfully. This is used so the state can be
+ * temporarily shown until the next state change.
+ */
+ updateToolbarState: function(aReason = null) {
+ if (!this.toolbarButton.node) {
+ return;
+ }
+ let state = "";
+ let mozL10nId = "loop-call-button3";
+ let suffix = ".tooltiptext";
+ if (this.MozLoopService.errors.size) {
+ state = "error";
+ mozL10nId += "-error";
+ } else if (this.MozLoopService.screenShareActive) {
+ state = "action";
+ mozL10nId += "-screensharing";
+ } else if (aReason == "login" && this.MozLoopService.userProfile) {
+ state = "active";
+ mozL10nId += "-active";
+ suffix += "2";
+ } else if (this.MozLoopService.doNotDisturb) {
+ state = "disabled";
+ mozL10nId += "-donotdisturb";
+ } else if (this.MozLoopService.roomsParticipantsCount > 0) {
+ state = "active";
+ this.roomsWithNonOwners().then(roomsWithNonOwners => {
+ if (roomsWithNonOwners.length > 0) {
+ mozL10nId += "-participantswaiting";
+ } else {
+ mozL10nId += "-active";
+ }
+
+ suffix += "2";
+ this.updateTooltiptext(mozL10nId + suffix);
+ this.toolbarButton.node.setAttribute("state", state);
+ });
+ return;
+ } else {
+ suffix += "2";
+ }
+
+ this.toolbarButton.node.setAttribute("state", state);
+ this.updateTooltiptext(mozL10nId + suffix);
+ },
+
+ /**
+ * Updates the tootltiptext to reflect Loop status.
+ *
+ * @param {string} [mozL10nId] l10n ID that refelct the current
+ * Loop status.
+ */
+ updateTooltiptext: function(mozL10nId) {
+ this.toolbarButton.node.setAttribute("tooltiptext", mozL10nId);
+ var tooltiptext = CustomizableUI.getLocalizedProperty(this.toolbarButton, "tooltiptext");
+ this.toolbarButton.node.setAttribute("tooltiptext", tooltiptext);
+ },
+
+ /**
+ * Show a desktop notification when 'do not disturb' isn't enabled.
+ *
+ * @param {Object} options Set of options that may tweak the appearance and
+ * behavior of the notification.
+ * Option params:
+ * - {String} title Notification title message
+ * - {String} [message] Notification body text
+ * - {String} [icon] Notification icon
+ * - {String} [sound] Sound to play
+ * - {String} [selectTab] Tab to select when the panel
+ * opens
+ * - {Function} [onclick] Callback to invoke when
+ * the notification is clicked.
+ * Opens the panel by default.
+ */
+ showNotification: function(options) {
+ if (this.MozLoopService.doNotDisturb) {
+ return;
+ }
+
+ if (!options.title) {
+ throw new Error("Missing title, can not display notification");
+ }
+
+ let notificationOptions = {
+ body: options.message || ""
+ };
+ if (options.icon) {
+ notificationOptions.icon = options.icon;
+ }
+ if (options.sound) {
+ // This will not do anything, until bug bug 1105222 is resolved.
+ notificationOptions.mozbehavior = {
+ soundFile: ""
+ };
+ this.playSound(options.sound);
+ }
+
+ let notification = new window.Notification(options.title, notificationOptions);
+ notification.addEventListener("click", e => {
+ if (window.closed) {
+ return;
+ }
+
+ try {
+ window.focus();
+ } catch (ex) {}
+
+ // We need a setTimeout here, otherwise the panel won't show after the
+ // window received focus.
+ window.setTimeout(() => {
+ if (typeof options.onclick == "function") {
+ options.onclick();
+ } else {
+ // Open the Loop panel as a default action.
+ this.openCallPanel(null, options.selectTab || null);
+ }
+ }, 0);
+ });
+ },
+
+ /**
+ * Play a sound in this window IF there's no sound playing yet.
+ *
+ * @param {String} name Name of the sound, like 'ringtone' or 'room-joined'
+ */
+ playSound: function(name) {
+ if (this.ActiveSound || this.MozLoopService.doNotDisturb) {
+ return;
+ }
+
+ this.activeSound = new window.Audio();
+ this.activeSound.src = `chrome://browser/content/loop/shared/sounds/${name}.ogg`;
+ this.activeSound.load();
+ this.activeSound.play();
+
+ this.activeSound.addEventListener("ended", () => this.activeSound = undefined, false);
+ },
+
+ /**
+ * Start listening to selected tab changes and notify any content page that's
+ * listening to 'BrowserSwitch' push messages.
+ *
+ * Push message parameters:
+ * - {Integer} windowId The new windowId for the browser.
+ */
+ startBrowserSharing: function() {
+ if (!this._listeningToTabSelect) {
+ gBrowser.tabContainer.addEventListener("TabSelect", this);
+ this._listeningToTabSelect = true;
+ }
+
+ this._maybeShowBrowserSharingInfoBar();
+
+ // Get the first window Id for the listener.
+ this.LoopAPI.broadcastPushMessage("BrowserSwitch",
+ gBrowser.selectedBrowser.outerWindowID);
+ },
+
+ /**
+ * Stop listening to selected tab changes.
+ */
+ stopBrowserSharing: function() {
+ if (!this._listeningToTabSelect) {
+ return;
+ }
+
+ this._hideBrowserSharingInfoBar();
+ gBrowser.tabContainer.removeEventListener("TabSelect", this);
+ this._listeningToTabSelect = false;
+ },
+
+ /**
+ * Helper function to fetch a localized string via the MozLoopService API.
+ * It's currently inconveniently wrapped inside a string of stringified JSON.
+ *
+ * @param {String} key The element id to get strings for.
+ * @return {String}
+ */
+ _getString: function(key) {
+ let str = this.MozLoopService.getStrings(key);
+ if (str) {
+ str = JSON.parse(str).textContent;
+ }
+ return str;
+ },
+
+ /**
+ * Shows an infobar notification at the top of the browser window that warns
+ * the user that their browser tabs are being broadcasted through the current
+ * conversation.
+ */
+ _maybeShowBrowserSharingInfoBar: function() {
+ this._hideBrowserSharingInfoBar();
+
+ // Don't show the infobar if it's been permanently disabled from the menu.
+ if (!this.MozLoopService.getLoopPref(kPrefBrowserSharingInfoBar)) {
+ return;
+ }
+
+ let box = gBrowser.getNotificationBox();
+ let paused = false;
+ let bar = box.appendNotification(
+ this._getString("infobar_screenshare_browser_message"),
+ kBrowserSharingNotificationId,
+ // Icon is defined in browser theme CSS.
+ null,
+ box.PRIORITY_WARNING_LOW,
+ [{
+ label: this._getString("infobar_button_pause_label"),
+ accessKey: this._getString("infobar_button_pause_accesskey"),
+ isDefault: false,
+ callback: (event, buttonInfo, buttonNode) => {
+ paused = !paused;
+ bar.label = paused ? this._getString("infobar_screenshare_paused_browser_message") :
+ this._getString("infobar_screenshare_browser_message");
+ bar.classList.toggle("paused", paused);
+ buttonNode.label = paused ? this._getString("infobar_button_resume_label") :
+ this._getString("infobar_button_pause_label");
+ buttonNode.accessKey = paused ? this._getString("infobar_button_resume_accesskey") :
+ this._getString("infobar_button_pause_accesskey");
+ return true;
+ }
+ },
+ {
+ label: this._getString("infobar_button_stop_label"),
+ accessKey: this._getString("infobar_button_stop_accesskey"),
+ isDefault: true,
+ callback: () => {
+ this._hideBrowserSharingInfoBar();
+ LoopUI.MozLoopService.hangupAllChatWindows();
+ }
+ }]
+ );
+
+ // Keep showing the notification bar until the user explicitly closes it.
+ bar.persistence = -1;
+ },
+
+ /**
+ * Hides the infobar, permanantly if requested.
+ *
+ * @param {Boolean} permanently Flag that determines if the infobar will never
+ * been shown again. Defaults to `false`.
+ * @return {Boolean} |true| if the infobar was hidden here.
+ */
+ _hideBrowserSharingInfoBar: function(permanently = false, browser) {
+ browser = browser || gBrowser.selectedBrowser;
+ let box = gBrowser.getNotificationBox(browser);
+ let notification = box.getNotificationWithValue(kBrowserSharingNotificationId);
+ let removed = false;
+ if (notification) {
+ box.removeNotification(notification);
+ removed = true;
+ }
+
+ if (permanently) {
+ this.MozLoopService.setLoopPref(kPrefBrowserSharingInfoBar, false);
+ }
+
+ return removed;
+ },
+
+ /**
+ * Handles events from gBrowser.
+ */
+ handleEvent: function(event) {
+ // We only should get "select" events.
+ if (event.type != "TabSelect") {
+ return;
+ }
+
+ let wasVisible = false;
+ // Hide the infobar from the previous tab.
+ if (event.detail.previousTab) {
+ wasVisible = this._hideBrowserSharingInfoBar(false,
+ event.detail.previousTab.linkedBrowser);
+ }
+
+ // We've changed the tab, so get the new window id.
+ this.LoopAPI.broadcastPushMessage("BrowserSwitch",
+ gBrowser.selectedBrowser.outerWindowID);
+
+ if (wasVisible) {
+ // If the infobar was visible before, we should show it again after the
+ // switch.
+ this._maybeShowBrowserSharingInfoBar();
+ }
+ },
+
+ /**
+ * Fetch the favicon of the currently selected tab in the format of a data-uri.
+ *
+ * @param {Function} callback Function to be invoked with an error object as
+ * its first argument when an error occurred or
+ * a string as second argument when the favicon
+ * has been fetched.
+ */
+ getFavicon: function(callback) {
+ let pageURI = gBrowser.selectedTab.linkedBrowser.currentURI.spec;
+ // If the tab page’s url starts with http(s), fetch icon.
+ if (!/^https?:/.test(pageURI)) {
+ callback();
+ return;
+ }
+
+ this.PlacesUtils.promiseFaviconLinkUrl(pageURI).then(uri => {
+ // We XHR the favicon to get a File object, which we can pass to the FileReader
+ // object. The FileReader turns the File object into a data-uri.
+ let xhr = new XMLHttpRequest();
+ xhr.open("get", uri.spec, true);
+ xhr.responseType = "blob";
+ xhr.overrideMimeType("image/x-icon");
+ xhr.onload = () => {
+ if (xhr.status != 200) {
+ callback(new Error("Invalid status code received for favicon XHR: " + xhr.status));
+ return;
+ }
+
+ let reader = new FileReader();
+ reader.onload = reader.onload = () => callback(null, reader.result);
+ reader.onerror = callback;
+ reader.readAsDataURL(xhr.response);
+ };
+ xhr.onerror = callback;
+ xhr.send();
+ }).catch(err => {
+ callback(err || new Error("No favicon found"));
+ });
+ }
+ };
+})();
+
+XPCOMUtils.defineLazyModuleGetter(LoopUI, "hookWindowCloseForPanelClose", "resource://gre/modules/MozSocialAPI.jsm");
+XPCOMUtils.defineLazyModuleGetter(LoopUI, "LoopAPI", "resource:///modules/loop/MozLoopAPI.jsm");
+XPCOMUtils.defineLazyModuleGetter(LoopUI, "LoopRooms", "resource:///modules/loop/LoopRooms.jsm");
+XPCOMUtils.defineLazyModuleGetter(LoopUI, "MozLoopService", "resource:///modules/loop/MozLoopService.jsm");
+XPCOMUtils.defineLazyModuleGetter(LoopUI, "PanelFrame", "resource:///modules/PanelFrame.jsm");
+XPCOMUtils.defineLazyModuleGetter(LoopUI, "PlacesUtils", "resource://gre/modules/PlacesUtils.jsm");
diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css
index 876f117ae152..58b764277e91 100644
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -902,6 +902,11 @@ notification[value="translation"] {
-moz-binding: url("chrome://browser/content/translation-infobar.xml#translationbar");
}
+/* Loop/ Hello */
+notification[value="loop-sharing-notification"] .close-icon {
+ display: none;
+}
+
/* Social */
/* Note the chatbox 'width' values are duplicated in socialchat.xml */
chatbox {
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 6174a0baf893..61df291af60d 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -274,6 +274,7 @@ var gInitialPages = [
#include browser-fullScreen.js
#include browser-fullZoom.js
#include browser-gestureSupport.js
+#include browser-loop.js
#include browser-places.js
#include browser-plugins.js
#include browser-safebrowsing.js
@@ -1356,6 +1357,8 @@ var gBrowserInit = {
gDataNotificationInfoBar.init();
#endif
+ LoopUI.init();
+
gBrowserThumbnails.init();
// Add Devtools menuitems and listeners
@@ -1537,6 +1540,7 @@ var gBrowserInit = {
TabView.uninit();
SocialUI.uninit();
gBrowserThumbnails.uninit();
+ LoopUI.uninit();
FullZoom.destroy();
Services.obs.removeObserver(gSessionHistoryObserver, "browser:purge-session-history");
diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp
index 78f55c9b64c1..e9a60346fe65 100644
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -108,12 +108,12 @@ static RedirEntry kRedirMap[] = {
{
"debugging", "chrome://devtools/content/aboutdebugging/aboutdebugging.xhtml",
nsIAboutModule::ALLOW_SCRIPT },
- { "loopconversation", "chrome://loop/content/panels/conversation.html",
+ { "loopconversation", "chrome://browser/content/loop/conversation.html",
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
nsIAboutModule::ALLOW_SCRIPT |
nsIAboutModule::HIDE_FROM_ABOUTABOUT |
nsIAboutModule::ENABLE_INDEXED_DB },
- { "looppanel", "chrome://loop/content/panels/panel.html",
+ { "looppanel", "chrome://browser/content/loop/panel.html",
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
nsIAboutModule::ALLOW_SCRIPT |
nsIAboutModule::HIDE_FROM_ABOUTABOUT |
diff --git a/browser/components/customizableui/CustomizableWidgets.jsm b/browser/components/customizableui/CustomizableWidgets.jsm
index b7a1fc9d0aab..82c6f2bf4d33 100644
--- a/browser/components/customizableui/CustomizableWidgets.jsm
+++ b/browser/components/customizableui/CustomizableWidgets.jsm
@@ -950,6 +950,42 @@ const CustomizableWidgets = [
let win = aEvent.view;
win.MailIntegration.sendLinkForBrowser(win.gBrowser.selectedBrowser)
}
+ }, {
+ id: "loop-button",
+ type: "custom",
+ label: "loop-call-button3.label",
+ tooltiptext: "loop-call-button3.tooltiptext2",
+ privateBrowsingTooltiptext: "loop-call-button3-pb.tooltiptext",
+ defaultArea: CustomizableUI.AREA_NAVBAR,
+ introducedInVersion: 4,
+ onBuild: function(aDocument) {
+ // If we're not supposed to see the button, return zip.
+ if (!Services.prefs.getBoolPref("loop.enabled")) {
+ return null;
+ }
+
+ let isWindowPrivate = PrivateBrowsingUtils.isWindowPrivate(aDocument.defaultView);
+
+ let node = aDocument.createElementNS(kNSXUL, "toolbarbutton");
+ node.setAttribute("id", this.id);
+ node.classList.add("toolbarbutton-1");
+ node.classList.add("chromeclass-toolbar-additional");
+ node.classList.add("badged-button");
+ node.setAttribute("label", CustomizableUI.getLocalizedProperty(this, "label"));
+ if (isWindowPrivate)
+ node.setAttribute("disabled", "true");
+ let tooltiptext = isWindowPrivate ?
+ CustomizableUI.getLocalizedProperty(this, "privateBrowsingTooltiptext",
+ [CustomizableUI.getLocalizedProperty(this, "label")]) :
+ CustomizableUI.getLocalizedProperty(this, "tooltiptext");
+ node.setAttribute("tooltiptext", tooltiptext);
+ node.setAttribute("removable", "true");
+ node.addEventListener("command", function(event) {
+ aDocument.defaultView.LoopUI.togglePanel(event);
+ });
+
+ return node;
+ }
}, {
id: "web-apps-button",
label: "web-apps-button.label",
diff --git a/browser/extensions/loop/.eslintignore b/browser/components/loop/.eslintignore
similarity index 62%
rename from browser/extensions/loop/.eslintignore
rename to browser/components/loop/.eslintignore
index b5c8be673540..64397d1db3d2 100644
--- a/browser/extensions/loop/.eslintignore
+++ b/browser/components/loop/.eslintignore
@@ -1,16 +1,12 @@
# This file currently uses a non-standard (and not on a standards track)
# if statement within catch.
-content/modules/MozLoopWorker.js
+modules/MozLoopWorker.js
# This file currently uses es7 features eslint issue:
# https://github.com/eslint/espree/issues/125
-content/modules/MozLoopAPI.jsm
-# Need to fix the configuration for this.
-bootstrap.js
-# Need to drop the preprocessing (bug 1212428)
-content/preferences/prefs.js
+modules/MozLoopAPI.jsm
# Libs we don't need to check
-content/panels/vendor
-content/shared/vendor
+content/libs
+content/shared/libs
standalone/content/libs
standalone/node_modules
# Libs we don't need to check
@@ -19,11 +15,11 @@ test/shared/vendor
test/coverage
test/node_modules
# These are generated react files that we don't need to check
-content/panels/js/conversation.js
-content/panels/js/conversationViews.js
-content/panels/js/panel.js
-content/panels/js/roomViews.js
-content/panels/js/feedbackViews.js
+content/js/conversation.js
+content/js/conversationViews.js
+content/js/panel.js
+content/js/roomViews.js
+content/js/feedbackViews.js
content/shared/js/textChatView.js
content/shared/js/linkifiedTextView.js
content/shared/js/views.js
diff --git a/browser/extensions/loop/.eslintrc b/browser/components/loop/.eslintrc
similarity index 100%
rename from browser/extensions/loop/.eslintrc
rename to browser/components/loop/.eslintrc
diff --git a/browser/extensions/loop/.eslintrc-gecko b/browser/components/loop/.eslintrc-gecko
similarity index 96%
rename from browser/extensions/loop/.eslintrc-gecko
rename to browser/components/loop/.eslintrc-gecko
index 5c377481cb82..e4f17cb773cf 100644
--- a/browser/extensions/loop/.eslintrc-gecko
+++ b/browser/components/loop/.eslintrc-gecko
@@ -7,10 +7,9 @@
"blockBindings": true,
"destructuring": true,
"generators": true,
- "objectLiteralShorthandMethods": true,
"restParams": true,
"spread": true,
- "templateStrings": true,
+ "objectLiteralShorthandMethods": true,
},
"globals": {
// Gecko + Loop Globals.
@@ -42,7 +41,6 @@
"MozLoopPushHandler": true,
"MozLoopService": true,
"OS": false,
- "PrivateBrowsingUtils": false,
"roomsPushNotification": true,
"Services": false,
"Social": false,
diff --git a/browser/extensions/loop/.gitignore b/browser/components/loop/.gitignore
similarity index 100%
rename from browser/extensions/loop/.gitignore
rename to browser/components/loop/.gitignore
diff --git a/browser/extensions/loop/README.txt b/browser/components/loop/README.txt
similarity index 92%
rename from browser/extensions/loop/README.txt
rename to browser/components/loop/README.txt
index 7b23f46e2e20..4903e0866a1d 100644
--- a/browser/extensions/loop/README.txt
+++ b/browser/components/loop/README.txt
@@ -22,9 +22,9 @@ using npm in order to compile the .jsx files into regular .js ones:
npm install -g react-tools@0.12.2
Once installed, run build-jsx with the --watch option from
-browser/extensions/loop, eg.:
+browser/components/loop, eg.:
- cd browser/extensions/loop
+ cd browser/components/loop
./build-jsx --watch
build-jsx can also be do a one-time compile pass instead of watching if
@@ -36,7 +36,7 @@ Hacking
=======
Please be sure to execute
- browser/extensions/loop/run-all-loop-tests.sh
+ browser/components/loop/run-all-loop-tests.sh
from the top level before requesting review on a patch.
@@ -52,7 +52,7 @@ If you install eslint and the react plugin globally:
npm install -g eslint
npm install -g eslint-plugin-react
-You can also run it by hand in the browser/extensions/loop directory:
+You can also run it by hand in the browser/components/loop directory:
eslint --ext .js --ext .jsx --ext .jsm .
@@ -88,7 +88,7 @@ install that is properly configured. From the top-level gecko directory,
execute:
export LOOP_SERVER=/Users/larry/src/loop-server
- ./mach marionette-test browser/extensions/loop/test/functional/manifest.ini
+ ./mach marionette-test browser/components/loop/test/functional/manifest.ini
Once the automation is complete, we'll include this in run-all-loop-tests.sh
as well.
diff --git a/browser/extensions/loop/build-jsx b/browser/components/loop/build-jsx
similarity index 98%
rename from browser/extensions/loop/build-jsx
rename to browser/components/loop/build-jsx
index e8bc48012297..be95fd1a06bb 100755
--- a/browser/extensions/loop/build-jsx
+++ b/browser/components/loop/build-jsx
@@ -74,7 +74,7 @@ def find_react_command():
return [node, jsx_path]
-SHARED_LIBS_DIR=os.path.join(os.path.dirname(__file__), "content", "shared", "vendor")
+SHARED_LIBS_DIR=os.path.join(os.path.dirname(__file__), "content", "shared", "libs")
REACT_VERSION=find_react_version(SHARED_LIBS_DIR)
src_files = [] # files to be compiled
@@ -99,7 +99,7 @@ else:
# parse the CLI arguments
description = 'Loop build tool for JSX files. ' + \
'Will scan entire loop directory and compile them in place. ' + \
- 'Must be executed from browser/extensions/loop directory.'
+ 'Must be executed from browser/components/loop directory.'
parser = argparse.ArgumentParser(description=description)
parser.add_argument('--watch', '-w', action='store_true', help='continuous' +
diff --git a/browser/components/loop/content/conversation.html b/browser/components/loop/content/conversation.html
new file mode 100644
index 000000000000..dfc2c8715f9d
--- /dev/null
+++ b/browser/components/loop/content/conversation.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/browser/extensions/loop/content/panels/css/panel.css b/browser/components/loop/content/css/panel.css
similarity index 92%
rename from browser/extensions/loop/content/panels/css/panel.css
rename to browser/components/loop/content/css/panel.css
index f875d502bae5..374d86543028 100644
--- a/browser/extensions/loop/content/panels/css/panel.css
+++ b/browser/components/loop/content/css/panel.css
@@ -12,7 +12,7 @@ body {
/* Beta Ribbon */
.beta-ribbon {
- background: url("../../shared/img/beta-ribbon.svg") no-repeat;
+ background: url("../shared/img/beta-ribbon.svg") no-repeat;
background-size: 30px;
width: 30px;
height: 30px;
@@ -158,7 +158,7 @@ body {
transform: translateY(-50%);
padding-top: 11rem;
padding-bottom: 1rem;
- background-image: url("../../shared/img/empty_conversations.svg");
+ background-image: url("../shared/img/empty_conversations.svg");
background-repeat: no-repeat;
background-position: top center;
}
@@ -324,11 +324,11 @@ body {
}
.room-list > .room-entry:hover > h2 > .copy-link {
- background-image: url(../../shared/img/icons-16x16.svg#copy);
+ background-image: url(../shared/img/icons-16x16.svg#copy);
}
.room-list > .room-entry:hover > h2 > .delete-link {
- background-image: url(../../shared/img/icons-16x16.svg#trash);
+ background-image: url(../shared/img/icons-16x16.svg#trash);
}
/* scale this up to 1.1x and then back to the original size */
@@ -338,7 +338,7 @@ body {
}
.room-list > .room-entry > h2 > .copy-link.checked {
- background: transparent url(../../shared/img/icons-16x16.svg#checkmark);
+ background: transparent url(../shared/img/icons-16x16.svg#checkmark);
animation: pulse .150s;
animation-timing-function: ease-in-out;
top: 0;
@@ -362,7 +362,7 @@ body {
/* Room entry edit button */
.room-entry-context-edit-btn {
- background-image: url("../../shared/img/icons-10x10.svg#edit-darkgrey");
+ background-image: url("../shared/img/icons-10x10.svg#edit-darkgrey");
background-position: center;
background-repeat: no-repeat;
background-size: 12px;
@@ -399,7 +399,7 @@ html[dir="rtl"] .room-entry-context-actions > .dropdown-menu {
.button-close {
background-color: transparent;
- background-image: url(../../shared/img/icons-10x10.svg#close);
+ background-image: url(../shared/img/icons-10x10.svg#close);
background-repeat: no-repeat;
background-size: 8px 8px;
border: none;
@@ -428,7 +428,7 @@ html[dir="rtl"] .room-entry-context-actions > .dropdown-menu {
}
.spinner.busy {
- background-image: url(../../shared/img/spinner.png);
+ background-image: url(../shared/img/spinner.png);
animation-name: spinnerRotate;
animation-duration: 1s;
animation-timing-function: linear;
@@ -437,7 +437,7 @@ html[dir="rtl"] .room-entry-context-actions > .dropdown-menu {
@media (min-resolution: 2dppx) {
.spinner.busy {
- background-image: url(../../shared/img/spinner@2x.png);
+ background-image: url(../shared/img/spinner@2x.png);
}
}
@@ -502,7 +502,7 @@ html[dir="rtl"] .generate-url-spinner {
margin-left: 10px;
margin-right: 10px;
vertical-align: middle;
- background-image: url("../../shared/img/telefonica.png");
+ background-image: url("../shared/img/telefonica.png");
background-size: 72px 20px;
width: 72px;
height: 20px;
@@ -510,21 +510,21 @@ html[dir="rtl"] .generate-url-spinner {
#powered-by-logo.en-GB,
#powered-by-logo.de {
- background-image: url("../../shared/img/02.png");
+ background-image: url("../shared/img/02.png");
background-size: 21px 20px;
width: 21px;
height: 20px;
}
#powered-by-logo.pt-BR {
- background-image: url("../../shared/img/vivo.png");
+ background-image: url("../shared/img/vivo.png");
background-size: 53px 26px;
width: 53px;
height: 26px;
}
#powered-by-logo[class^="es-"] {
- background-image: url("../../shared/img/movistar.png");
+ background-image: url("../shared/img/movistar.png");
background-size: 92px 20px;
width: 92px;
height: 20px;
@@ -532,20 +532,20 @@ html[dir="rtl"] .generate-url-spinner {
@media (min-resolution: 2dppx) {
#powered-by-logo {
- background-image: url("../../shared/img/telefonica@2x.png");
+ background-image: url("../shared/img/telefonica@2x.png");
}
#powered-by-logo.en-GB,
#powered-by-logo.de {
- background-image: url("../../shared/img/02@2x.png");
+ background-image: url("../shared/img/02@2x.png");
}
#powered-by-logo.pt-BR {
- background-image: url("../../shared/img/vivo@2x.png");
+ background-image: url("../shared/img/vivo@2x.png");
}
#powered-by-logo[class^="es-"] {
- background-image: url("../../shared/img/movistar@2x.png");
+ background-image: url("../shared/img/movistar@2x.png");
}
}
@@ -594,7 +594,7 @@ html[dir="rtl"] .generate-url-spinner {
border: none;
cursor: pointer;
vertical-align: middle;
- background: transparent url("../../shared/img/icons-10x10.svg#settings-cog");
+ background: transparent url("../shared/img/icons-10x10.svg#settings-cog");
background-position: center;
background-repeat: no-repeat;
background-size: cover;
diff --git a/browser/extensions/loop/content/panels/js/.eslintrc b/browser/components/loop/content/js/.eslintrc
similarity index 100%
rename from browser/extensions/loop/content/panels/js/.eslintrc
rename to browser/components/loop/content/js/.eslintrc
diff --git a/browser/extensions/loop/content/panels/js/conversation.js b/browser/components/loop/content/js/conversation.js
similarity index 100%
rename from browser/extensions/loop/content/panels/js/conversation.js
rename to browser/components/loop/content/js/conversation.js
diff --git a/browser/extensions/loop/content/panels/js/conversation.jsx b/browser/components/loop/content/js/conversation.jsx
similarity index 100%
rename from browser/extensions/loop/content/panels/js/conversation.jsx
rename to browser/components/loop/content/js/conversation.jsx
diff --git a/browser/extensions/loop/content/panels/js/conversationAppStore.js b/browser/components/loop/content/js/conversationAppStore.js
similarity index 100%
rename from browser/extensions/loop/content/panels/js/conversationAppStore.js
rename to browser/components/loop/content/js/conversationAppStore.js
diff --git a/browser/extensions/loop/content/panels/js/feedbackViews.js b/browser/components/loop/content/js/feedbackViews.js
similarity index 100%
rename from browser/extensions/loop/content/panels/js/feedbackViews.js
rename to browser/components/loop/content/js/feedbackViews.js
diff --git a/browser/extensions/loop/content/panels/js/feedbackViews.jsx b/browser/components/loop/content/js/feedbackViews.jsx
similarity index 100%
rename from browser/extensions/loop/content/panels/js/feedbackViews.jsx
rename to browser/components/loop/content/js/feedbackViews.jsx
diff --git a/browser/extensions/loop/content/panels/js/otconfig.js b/browser/components/loop/content/js/otconfig.js
similarity index 100%
rename from browser/extensions/loop/content/panels/js/otconfig.js
rename to browser/components/loop/content/js/otconfig.js
diff --git a/browser/extensions/loop/content/panels/js/panel.js b/browser/components/loop/content/js/panel.js
similarity index 98%
rename from browser/extensions/loop/content/panels/js/panel.js
rename to browser/components/loop/content/js/panel.js
index e5c41a08ceb6..ff4ca198eb3a 100644
--- a/browser/extensions/loop/content/panels/js/panel.js
+++ b/browser/components/loop/content/js/panel.js
@@ -29,7 +29,7 @@ loop.panel = (function(_, mozL10n) {
return (
React.createElement("div", {className: "fte-get-started-content"},
React.createElement("header", {className: "fte-title"},
- React.createElement("img", {src: "shared/img/hello_logo.svg"}),
+ React.createElement("img", {src: "loop/shared/img/hello_logo.svg"}),
React.createElement("div", {className: "fte-subheader"},
mozL10n.get("first_time_experience_subheading")
)
@@ -379,7 +379,7 @@ loop.panel = (function(_, mozL10n) {
_renderDefaultIcon: function() {
return (
React.createElement("div", {className: "room-entry-context-item"},
- React.createElement("img", {src: "shared/img/icons-16x16.svg#globe"})
+ React.createElement("img", {src: "loop/shared/img/icons-16x16.svg#globe"})
)
);
},
@@ -390,7 +390,7 @@ loop.panel = (function(_, mozL10n) {
React.createElement("a", {href: roomUrl.location,
onClick: this.handleClick,
title: roomUrl.description},
- React.createElement("img", {src: roomUrl.thumbnail || "shared/img/icons-16x16.svg#globe"})
+ React.createElement("img", {src: roomUrl.thumbnail || "loop/shared/img/icons-16x16.svg#globe"})
)
)
);
@@ -717,7 +717,7 @@ loop.panel = (function(_, mozL10n) {
React.createElement("div", {className: "room-list"},
this._renderNewRoomButton(),
React.createElement("div", {className: "room-list-loading"},
- React.createElement("img", {src: "shared/img/animated-spinner.svg"})
+ React.createElement("img", {src: "loop/shared/img/animated-spinner.svg"})
)
)
);
@@ -884,7 +884,7 @@ loop.panel = (function(_, mozL10n) {
return (
React.createElement("div", {className: "error-content"},
React.createElement("header", {className: "error-title"},
- React.createElement("img", {src: "shared/img/sad_hello_icon_64x64.svg"}),
+ React.createElement("img", {src: "loop/shared/img/sad_hello_icon_64x64.svg"}),
React.createElement("p", {className: "error-subheader"},
mozL10n.get("e10s_not_supported_subheading", {
brandShortname: mozL10n.get("clientShortname2")
diff --git a/browser/extensions/loop/content/panels/js/panel.jsx b/browser/components/loop/content/js/panel.jsx
similarity index 99%
rename from browser/extensions/loop/content/panels/js/panel.jsx
rename to browser/components/loop/content/js/panel.jsx
index d2c11eca60a5..fb14776745f8 100644
--- a/browser/extensions/loop/content/panels/js/panel.jsx
+++ b/browser/components/loop/content/js/panel.jsx
@@ -29,7 +29,7 @@ loop.panel = (function(_, mozL10n) {
return (
);
@@ -717,7 +717,7 @@ loop.panel = (function(_, mozL10n) {
{this._renderNewRoomButton()}
-
+
);
@@ -884,7 +884,7 @@ loop.panel = (function(_, mozL10n) {
return (
-
+
{mozL10n.get("e10s_not_supported_subheading", {
brandShortname: mozL10n.get("clientShortname2")
diff --git a/browser/extensions/loop/content/panels/js/roomStore.js b/browser/components/loop/content/js/roomStore.js
similarity index 100%
rename from browser/extensions/loop/content/panels/js/roomStore.js
rename to browser/components/loop/content/js/roomStore.js
diff --git a/browser/extensions/loop/content/panels/js/roomViews.js b/browser/components/loop/content/js/roomViews.js
similarity index 99%
rename from browser/extensions/loop/content/panels/js/roomViews.js
rename to browser/components/loop/content/js/roomViews.js
index 67e02207c999..5f49fdbf1f61 100644
--- a/browser/extensions/loop/content/panels/js/roomViews.js
+++ b/browser/components/loop/content/js/roomViews.js
@@ -346,14 +346,14 @@ loop.roomViews = (function(mozL10n) {
"triggered": this.state.copiedUrl
}),
onClick: this.handleCopyButtonClick},
- React.createElement("img", {src: "shared/img/glyph-link-16x16.svg"}),
+ React.createElement("img", {src: "loop/shared/img/svg/glyph-link-16x16.svg"}),
React.createElement("p", null, mozL10n.get(this.state.copiedUrl ?
"invite_copied_link_button" : "invite_copy_link_button"))
),
React.createElement("div", {className: "btn-email invite-button",
onClick: this.handleEmailButtonClick,
onMouseOver: this.resetTriggeredButtons},
- React.createElement("img", {src: "shared/img/glyph-email-16x16.svg"}),
+ React.createElement("img", {src: "loop/shared/img/svg/glyph-email-16x16.svg"}),
React.createElement("p", null, mozL10n.get("invite_email_link_button"))
)
),
@@ -536,7 +536,7 @@ loop.roomViews = (function(mozL10n) {
}
var url = this._getURL();
- var thumbnail = url && url.thumbnail || "shared/img/icons-16x16.svg#globe";
+ var thumbnail = url && url.thumbnail || "loop/shared/img/icons-16x16.svg#globe";
var urlDescription = url && url.description || "";
var location = url && url.location || "";
diff --git a/browser/extensions/loop/content/panels/js/roomViews.jsx b/browser/components/loop/content/js/roomViews.jsx
similarity index 99%
rename from browser/extensions/loop/content/panels/js/roomViews.jsx
rename to browser/components/loop/content/js/roomViews.jsx
index 5bbbd0fb2765..7f5d66f7a6dc 100644
--- a/browser/extensions/loop/content/panels/js/roomViews.jsx
+++ b/browser/components/loop/content/js/roomViews.jsx
@@ -346,14 +346,14 @@ loop.roomViews = (function(mozL10n) {
"triggered": this.state.copiedUrl
})}
onClick={this.handleCopyButtonClick}>
-
+
{mozL10n.get(this.state.copiedUrl ?
"invite_copied_link_button" : "invite_copy_link_button")}
-
+
{mozL10n.get("invite_email_link_button")}
@@ -536,7 +536,7 @@ loop.roomViews = (function(mozL10n) {
}
var url = this._getURL();
- var thumbnail = url && url.thumbnail || "shared/img/icons-16x16.svg#globe";
+ var thumbnail = url && url.thumbnail || "loop/shared/img/icons-16x16.svg#globe";
var urlDescription = url && url.description || "";
var location = url && url.location || "";
diff --git a/browser/extensions/loop/content/panels/vendor/l10n.js b/browser/components/loop/content/libs/l10n.js
similarity index 100%
rename from browser/extensions/loop/content/panels/vendor/l10n.js
rename to browser/components/loop/content/libs/l10n.js
diff --git a/browser/components/loop/content/panel.html b/browser/components/loop/content/panel.html
new file mode 100644
index 000000000000..87fb62711b2c
--- /dev/null
+++ b/browser/components/loop/content/panel.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/browser/extensions/loop/content/shared/README.md b/browser/components/loop/content/shared/README.md
similarity index 100%
rename from browser/extensions/loop/content/shared/README.md
rename to browser/components/loop/content/shared/README.md
diff --git a/browser/extensions/loop/content/shared/css/common.css b/browser/components/loop/content/shared/css/common.css
similarity index 100%
rename from browser/extensions/loop/content/shared/css/common.css
rename to browser/components/loop/content/shared/css/common.css
diff --git a/browser/extensions/loop/content/shared/css/conversation.css b/browser/components/loop/content/shared/css/conversation.css
similarity index 95%
rename from browser/extensions/loop/content/shared/css/conversation.css
rename to browser/components/loop/content/shared/css/conversation.css
index aacca74062f4..b56876429489 100644
--- a/browser/extensions/loop/content/shared/css/conversation.css
+++ b/browser/components/loop/content/shared/css/conversation.css
@@ -65,7 +65,7 @@ html[dir="rtl"] .conversation-toolbar > li {
background-position: center;
background-repeat: no-repeat;
background-color: transparent;
- background-image: url("../img/media-group.svg");
+ background-image: url("../img/svg/media-group.svg");
background-size: cover;
height: 28px;
width: 67px;
@@ -73,25 +73,25 @@ html[dir="rtl"] .conversation-toolbar > li {
.conversation-toolbar-media-btn-group-box > button:last-child:active,
.conversation-toolbar-media-btn-group-box > button:last-child:hover {
- background-image: url("../img/media-group-right-hover.svg");
+ background-image: url("../img/svg/media-group-right-hover.svg");
background-size: cover;
}
html[dir="rtl"] .conversation-toolbar-media-btn-group-box > button:last-child:active,
html[dir="rtl"] .conversation-toolbar-media-btn-group-box > button:last-child:hover {
- background-image: url("../img/media-group-left-hover.svg");
+ background-image: url("../img/svg/media-group-left-hover.svg");
background-size: cover;
}
.conversation-toolbar-media-btn-group-box > button:first-child:active,
.conversation-toolbar-media-btn-group-box > button:first-child:hover {
- background-image: url("../img/media-group-left-hover.svg");
+ background-image: url("../img/svg/media-group-left-hover.svg");
background-size: cover;
}
html[dir="rtl"] .conversation-toolbar-media-btn-group-box > button:first-child:active,
html[dir="rtl"] .conversation-toolbar-media-btn-group-box > button:first-child:hover {
- background-image: url("../img/media-group-right-hover.svg");
+ background-image: url("../img/svg/media-group-right-hover.svg");
background-size: cover;
}
@@ -106,76 +106,76 @@ html[dir="rtl"] .conversation-toolbar-btn-box.btn-edit-entry {
/* conversationViews.jsx */
.conversation-toolbar .btn-hangup {
- background-image: url("../img/exit.svg");
+ background-image: url("../img/svg/exit.svg");
border: 0;
}
/* Audio mute button */
.btn-mute-audio:after {
- content: url("../img/audio.svg");
+ content: url("../img/svg/audio.svg");
}
.btn-mute-audio.muted:after {
- content: url("../img/audio-mute.svg");
+ content: url("../img/svg/audio-mute.svg");
}
.btn-mute-audio:hover:after,
.btn-mute-audio:active:after {
- content: url("../img/audio-hover.svg");
+ content: url("../img/svg/audio-hover.svg");
}
.btn-mute-audio.muted:hover:after,
.btn-mute-audio.muted:active:after {
- content: url("../img/audio-mute-hover.svg");
+ content: url("../img/svg/audio-mute-hover.svg");
}
/* Video mute button */
.btn-mute-video:after {
- content: url("../img/video.svg");
+ content: url("../img/svg/video.svg");
}
.btn-mute-video:active:after,
.btn-mute-video:hover:after {
- content: url("../img/video-hover.svg");
+ content: url("../img/svg/video-hover.svg");
}
.btn-mute-video.muted:after {
- content: url("../img/video-mute.svg");
+ content: url("../img/svg/video-mute.svg");
}
.btn-mute-video.muted:hover:after,
.btn-mute-video.muted:active:after {
- content: url("../img/video-mute-hover.svg");
+ content: url("../img/svg/video-mute-hover.svg");
}
.btn-settings {
width: 28px;
height: 28px;
background-size: 28px;
- background-image: url("../img/settings.svg");
+ background-image: url("../img/svg/settings.svg");
background-color: transparent;
}
.btn-settings:hover,
.btn-settings:active {
- background-image: url("../img/settings-hover.svg");
+ background-image: url("../img/svg/settings-hover.svg");
}
.btn-screen-share {
- background-image: url("../img/sharing.svg");
+ background-image: url("../img/svg/sharing.svg");
}
.btn-screen-share:hover,
.btn-screen-share:active {
- background-image: url("../img/sharing-hover.svg");
+ background-image: url("../img/svg/sharing-hover.svg");
}
.btn-screen-share.active {
- background-image: url("../img/sharing-active.svg");
+ background-image: url("../img/svg/sharing-active.svg");
}
.btn-screen-share.disabled {
/* The screen share button is in its pending state when its disabled. */
- background-image: url("../img/sharing-pending.svg");
+ background-image: url("../img/svg/sharing-pending.svg");
}
/* General Call (incoming or outgoing). */
diff --git a/browser/extensions/loop/content/shared/css/reset.css b/browser/components/loop/content/shared/css/reset.css
similarity index 100%
rename from browser/extensions/loop/content/shared/css/reset.css
rename to browser/components/loop/content/shared/css/reset.css
diff --git a/browser/extensions/loop/content/shared/img/02.png b/browser/components/loop/content/shared/img/02.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/02.png
rename to browser/components/loop/content/shared/img/02.png
diff --git a/browser/extensions/loop/content/shared/img/02@2x.png b/browser/components/loop/content/shared/img/02@2x.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/02@2x.png
rename to browser/components/loop/content/shared/img/02@2x.png
diff --git a/browser/extensions/loop/content/shared/img/animated-spinner.svg b/browser/components/loop/content/shared/img/animated-spinner.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/animated-spinner.svg
rename to browser/components/loop/content/shared/img/animated-spinner.svg
diff --git a/browser/extensions/loop/content/shared/img/audio-call-avatar.svg b/browser/components/loop/content/shared/img/audio-call-avatar.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/audio-call-avatar.svg
rename to browser/components/loop/content/shared/img/audio-call-avatar.svg
diff --git a/browser/extensions/loop/content/shared/img/audio-default-16x16@1.5x.png b/browser/components/loop/content/shared/img/audio-default-16x16@1.5x.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/audio-default-16x16@1.5x.png
rename to browser/components/loop/content/shared/img/audio-default-16x16@1.5x.png
diff --git a/browser/extensions/loop/content/shared/img/audio-default-16x16@2x.png b/browser/components/loop/content/shared/img/audio-default-16x16@2x.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/audio-default-16x16@2x.png
rename to browser/components/loop/content/shared/img/audio-default-16x16@2x.png
diff --git a/browser/extensions/loop/content/shared/img/avatars.svg b/browser/components/loop/content/shared/img/avatars.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/avatars.svg
rename to browser/components/loop/content/shared/img/avatars.svg
diff --git a/browser/extensions/loop/content/shared/img/beta-ribbon.svg b/browser/components/loop/content/shared/img/beta-ribbon.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/beta-ribbon.svg
rename to browser/components/loop/content/shared/img/beta-ribbon.svg
diff --git a/browser/extensions/loop/content/shared/img/chatbubble-arrow-left.svg b/browser/components/loop/content/shared/img/chatbubble-arrow-left.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/chatbubble-arrow-left.svg
rename to browser/components/loop/content/shared/img/chatbubble-arrow-left.svg
diff --git a/browser/extensions/loop/content/shared/img/chatbubble-arrow-right.svg b/browser/components/loop/content/shared/img/chatbubble-arrow-right.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/chatbubble-arrow-right.svg
rename to browser/components/loop/content/shared/img/chatbubble-arrow-right.svg
diff --git a/browser/extensions/loop/content/shared/img/check.svg b/browser/components/loop/content/shared/img/check.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/check.svg
rename to browser/components/loop/content/shared/img/check.svg
diff --git a/browser/extensions/loop/content/shared/img/ellipsis-v.svg b/browser/components/loop/content/shared/img/ellipsis-v.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/ellipsis-v.svg
rename to browser/components/loop/content/shared/img/ellipsis-v.svg
diff --git a/browser/extensions/loop/content/shared/img/empty_conversations.svg b/browser/components/loop/content/shared/img/empty_conversations.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/empty_conversations.svg
rename to browser/components/loop/content/shared/img/empty_conversations.svg
diff --git a/browser/extensions/loop/content/shared/img/empty_search.svg b/browser/components/loop/content/shared/img/empty_search.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/empty_search.svg
rename to browser/components/loop/content/shared/img/empty_search.svg
diff --git a/browser/extensions/loop/content/shared/img/facemute-14x14.png b/browser/components/loop/content/shared/img/facemute-14x14.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/facemute-14x14.png
rename to browser/components/loop/content/shared/img/facemute-14x14.png
diff --git a/browser/extensions/loop/content/shared/img/facemute-14x14@2x.png b/browser/components/loop/content/shared/img/facemute-14x14@2x.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/facemute-14x14@2x.png
rename to browser/components/loop/content/shared/img/facemute-14x14@2x.png
diff --git a/browser/extensions/loop/content/shared/img/firefox-avatar.svg b/browser/components/loop/content/shared/img/firefox-avatar.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/firefox-avatar.svg
rename to browser/components/loop/content/shared/img/firefox-avatar.svg
diff --git a/browser/extensions/loop/content/shared/img/firefox-logo.png b/browser/components/loop/content/shared/img/firefox-logo.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/firefox-logo.png
rename to browser/components/loop/content/shared/img/firefox-logo.png
diff --git a/browser/extensions/loop/content/shared/img/hangup-inverse-14x14.png b/browser/components/loop/content/shared/img/hangup-inverse-14x14.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/hangup-inverse-14x14.png
rename to browser/components/loop/content/shared/img/hangup-inverse-14x14.png
diff --git a/browser/extensions/loop/content/shared/img/hangup-inverse-14x14@2x.png b/browser/components/loop/content/shared/img/hangup-inverse-14x14@2x.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/hangup-inverse-14x14@2x.png
rename to browser/components/loop/content/shared/img/hangup-inverse-14x14@2x.png
diff --git a/browser/extensions/loop/content/shared/img/happy.png b/browser/components/loop/content/shared/img/happy.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/happy.png
rename to browser/components/loop/content/shared/img/happy.png
diff --git a/browser/extensions/loop/content/shared/img/hello_logo.svg b/browser/components/loop/content/shared/img/hello_logo.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/hello_logo.svg
rename to browser/components/loop/content/shared/img/hello_logo.svg
diff --git a/browser/extensions/loop/content/shared/img/helloicon.svg b/browser/components/loop/content/shared/img/helloicon.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/helloicon.svg
rename to browser/components/loop/content/shared/img/helloicon.svg
diff --git a/browser/extensions/loop/content/shared/img/icon_32.png b/browser/components/loop/content/shared/img/icon_32.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/icon_32.png
rename to browser/components/loop/content/shared/img/icon_32.png
diff --git a/browser/extensions/loop/content/shared/img/icon_64.png b/browser/components/loop/content/shared/img/icon_64.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/icon_64.png
rename to browser/components/loop/content/shared/img/icon_64.png
diff --git a/browser/extensions/loop/content/shared/img/icons-10x10.svg b/browser/components/loop/content/shared/img/icons-10x10.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/icons-10x10.svg
rename to browser/components/loop/content/shared/img/icons-10x10.svg
diff --git a/browser/extensions/loop/content/shared/img/icons-14x14.svg b/browser/components/loop/content/shared/img/icons-14x14.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/icons-14x14.svg
rename to browser/components/loop/content/shared/img/icons-14x14.svg
diff --git a/browser/extensions/loop/content/shared/img/icons-16x16.svg b/browser/components/loop/content/shared/img/icons-16x16.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/icons-16x16.svg
rename to browser/components/loop/content/shared/img/icons-16x16.svg
diff --git a/browser/extensions/loop/content/shared/img/movistar.png b/browser/components/loop/content/shared/img/movistar.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/movistar.png
rename to browser/components/loop/content/shared/img/movistar.png
diff --git a/browser/extensions/loop/content/shared/img/movistar@2x.png b/browser/components/loop/content/shared/img/movistar@2x.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/movistar@2x.png
rename to browser/components/loop/content/shared/img/movistar@2x.png
diff --git a/browser/extensions/loop/content/shared/img/mute-inverse-14x14.png b/browser/components/loop/content/shared/img/mute-inverse-14x14.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/mute-inverse-14x14.png
rename to browser/components/loop/content/shared/img/mute-inverse-14x14.png
diff --git a/browser/extensions/loop/content/shared/img/mute-inverse-14x14@2x.png b/browser/components/loop/content/shared/img/mute-inverse-14x14@2x.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/mute-inverse-14x14@2x.png
rename to browser/components/loop/content/shared/img/mute-inverse-14x14@2x.png
diff --git a/browser/extensions/loop/content/shared/img/pause-12x12.svg b/browser/components/loop/content/shared/img/pause-12x12.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/pause-12x12.svg
rename to browser/components/loop/content/shared/img/pause-12x12.svg
diff --git a/browser/extensions/loop/content/shared/img/play-12x12.svg b/browser/components/loop/content/shared/img/play-12x12.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/play-12x12.svg
rename to browser/components/loop/content/shared/img/play-12x12.svg
diff --git a/browser/extensions/loop/content/shared/img/sad.png b/browser/components/loop/content/shared/img/sad.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/sad.png
rename to browser/components/loop/content/shared/img/sad.png
diff --git a/browser/extensions/loop/content/shared/img/sad_hello_icon_64x64.svg b/browser/components/loop/content/shared/img/sad_hello_icon_64x64.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/sad_hello_icon_64x64.svg
rename to browser/components/loop/content/shared/img/sad_hello_icon_64x64.svg
diff --git a/browser/extensions/loop/content/shared/img/spinner.png b/browser/components/loop/content/shared/img/spinner.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/spinner.png
rename to browser/components/loop/content/shared/img/spinner.png
diff --git a/browser/extensions/loop/content/shared/img/spinner.svg b/browser/components/loop/content/shared/img/spinner.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/spinner.svg
rename to browser/components/loop/content/shared/img/spinner.svg
diff --git a/browser/extensions/loop/content/shared/img/spinner@2x.png b/browser/components/loop/content/shared/img/spinner@2x.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/spinner@2x.png
rename to browser/components/loop/content/shared/img/spinner@2x.png
diff --git a/browser/extensions/loop/content/shared/img/stop-12x12.svg b/browser/components/loop/content/shared/img/stop-12x12.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/stop-12x12.svg
rename to browser/components/loop/content/shared/img/stop-12x12.svg
diff --git a/browser/extensions/loop/content/shared/img/audio-hover.svg b/browser/components/loop/content/shared/img/svg/audio-hover.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/audio-hover.svg
rename to browser/components/loop/content/shared/img/svg/audio-hover.svg
diff --git a/browser/extensions/loop/content/shared/img/audio-mute-hover.svg b/browser/components/loop/content/shared/img/svg/audio-mute-hover.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/audio-mute-hover.svg
rename to browser/components/loop/content/shared/img/svg/audio-mute-hover.svg
diff --git a/browser/extensions/loop/content/shared/img/audio-mute.svg b/browser/components/loop/content/shared/img/svg/audio-mute.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/audio-mute.svg
rename to browser/components/loop/content/shared/img/svg/audio-mute.svg
diff --git a/browser/extensions/loop/content/shared/img/audio.svg b/browser/components/loop/content/shared/img/svg/audio.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/audio.svg
rename to browser/components/loop/content/shared/img/svg/audio.svg
diff --git a/browser/extensions/loop/content/shared/img/cam_audio-no.svg b/browser/components/loop/content/shared/img/svg/cam_audio-no.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/cam_audio-no.svg
rename to browser/components/loop/content/shared/img/svg/cam_audio-no.svg
diff --git a/browser/extensions/loop/content/shared/img/cam_audio.svg b/browser/components/loop/content/shared/img/svg/cam_audio.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/cam_audio.svg
rename to browser/components/loop/content/shared/img/svg/cam_audio.svg
diff --git a/browser/extensions/loop/content/shared/img/cam_audio_h.svg b/browser/components/loop/content/shared/img/svg/cam_audio_h.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/cam_audio_h.svg
rename to browser/components/loop/content/shared/img/svg/cam_audio_h.svg
diff --git a/browser/extensions/loop/content/shared/img/exit.svg b/browser/components/loop/content/shared/img/svg/exit.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/exit.svg
rename to browser/components/loop/content/shared/img/svg/exit.svg
diff --git a/browser/extensions/loop/content/shared/img/glyph-email-16x16.svg b/browser/components/loop/content/shared/img/svg/glyph-email-16x16.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/glyph-email-16x16.svg
rename to browser/components/loop/content/shared/img/svg/glyph-email-16x16.svg
diff --git a/browser/extensions/loop/content/shared/img/glyph-facebook-16x16.svg b/browser/components/loop/content/shared/img/svg/glyph-facebook-16x16.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/glyph-facebook-16x16.svg
rename to browser/components/loop/content/shared/img/svg/glyph-facebook-16x16.svg
diff --git a/browser/extensions/loop/content/shared/img/glyph-help-16x16.svg b/browser/components/loop/content/shared/img/svg/glyph-help-16x16.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/glyph-help-16x16.svg
rename to browser/components/loop/content/shared/img/svg/glyph-help-16x16.svg
diff --git a/browser/extensions/loop/content/shared/img/glyph-link-16x16.svg b/browser/components/loop/content/shared/img/svg/glyph-link-16x16.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/glyph-link-16x16.svg
rename to browser/components/loop/content/shared/img/svg/glyph-link-16x16.svg
diff --git a/browser/extensions/loop/content/shared/img/glyph-user-16x16.svg b/browser/components/loop/content/shared/img/svg/glyph-user-16x16.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/glyph-user-16x16.svg
rename to browser/components/loop/content/shared/img/svg/glyph-user-16x16.svg
diff --git a/browser/extensions/loop/content/shared/img/media-group-left-hover.svg b/browser/components/loop/content/shared/img/svg/media-group-left-hover.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/media-group-left-hover.svg
rename to browser/components/loop/content/shared/img/svg/media-group-left-hover.svg
diff --git a/browser/extensions/loop/content/shared/img/media-group-right-hover.svg b/browser/components/loop/content/shared/img/svg/media-group-right-hover.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/media-group-right-hover.svg
rename to browser/components/loop/content/shared/img/svg/media-group-right-hover.svg
diff --git a/browser/extensions/loop/content/shared/img/media-group.svg b/browser/components/loop/content/shared/img/svg/media-group.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/media-group.svg
rename to browser/components/loop/content/shared/img/svg/media-group.svg
diff --git a/browser/extensions/loop/content/shared/img/settings-hover.svg b/browser/components/loop/content/shared/img/svg/settings-hover.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/settings-hover.svg
rename to browser/components/loop/content/shared/img/svg/settings-hover.svg
diff --git a/browser/extensions/loop/content/shared/img/settings.svg b/browser/components/loop/content/shared/img/svg/settings.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/settings.svg
rename to browser/components/loop/content/shared/img/svg/settings.svg
diff --git a/browser/extensions/loop/content/shared/img/sharing-active.svg b/browser/components/loop/content/shared/img/svg/sharing-active.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/sharing-active.svg
rename to browser/components/loop/content/shared/img/svg/sharing-active.svg
diff --git a/browser/extensions/loop/content/shared/img/sharing-hover.svg b/browser/components/loop/content/shared/img/svg/sharing-hover.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/sharing-hover.svg
rename to browser/components/loop/content/shared/img/svg/sharing-hover.svg
diff --git a/browser/extensions/loop/content/shared/img/sharing-pending.svg b/browser/components/loop/content/shared/img/svg/sharing-pending.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/sharing-pending.svg
rename to browser/components/loop/content/shared/img/svg/sharing-pending.svg
diff --git a/browser/extensions/loop/content/shared/img/sharing.svg b/browser/components/loop/content/shared/img/svg/sharing.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/sharing.svg
rename to browser/components/loop/content/shared/img/svg/sharing.svg
diff --git a/browser/extensions/loop/content/shared/img/video-hover.svg b/browser/components/loop/content/shared/img/svg/video-hover.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/video-hover.svg
rename to browser/components/loop/content/shared/img/svg/video-hover.svg
diff --git a/browser/extensions/loop/content/shared/img/video-mute-hover.svg b/browser/components/loop/content/shared/img/svg/video-mute-hover.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/video-mute-hover.svg
rename to browser/components/loop/content/shared/img/svg/video-mute-hover.svg
diff --git a/browser/extensions/loop/content/shared/img/video-mute.svg b/browser/components/loop/content/shared/img/svg/video-mute.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/video-mute.svg
rename to browser/components/loop/content/shared/img/svg/video-mute.svg
diff --git a/browser/extensions/loop/content/shared/img/video.svg b/browser/components/loop/content/shared/img/svg/video.svg
similarity index 100%
rename from browser/extensions/loop/content/shared/img/video.svg
rename to browser/components/loop/content/shared/img/svg/video.svg
diff --git a/browser/extensions/loop/content/shared/img/telefonica.png b/browser/components/loop/content/shared/img/telefonica.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/telefonica.png
rename to browser/components/loop/content/shared/img/telefonica.png
diff --git a/browser/extensions/loop/content/shared/img/telefonica@2x.png b/browser/components/loop/content/shared/img/telefonica@2x.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/telefonica@2x.png
rename to browser/components/loop/content/shared/img/telefonica@2x.png
diff --git a/browser/extensions/loop/content/shared/img/vivo.png b/browser/components/loop/content/shared/img/vivo.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/vivo.png
rename to browser/components/loop/content/shared/img/vivo.png
diff --git a/browser/extensions/loop/content/shared/img/vivo@2x.png b/browser/components/loop/content/shared/img/vivo@2x.png
similarity index 100%
rename from browser/extensions/loop/content/shared/img/vivo@2x.png
rename to browser/components/loop/content/shared/img/vivo@2x.png
diff --git a/browser/extensions/loop/content/shared/js/actions.js b/browser/components/loop/content/shared/js/actions.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/actions.js
rename to browser/components/loop/content/shared/js/actions.js
diff --git a/browser/extensions/loop/content/shared/js/activeRoomStore.js b/browser/components/loop/content/shared/js/activeRoomStore.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/activeRoomStore.js
rename to browser/components/loop/content/shared/js/activeRoomStore.js
diff --git a/browser/extensions/loop/content/shared/js/crypto.js b/browser/components/loop/content/shared/js/crypto.js
similarity index 98%
rename from browser/extensions/loop/content/shared/js/crypto.js
rename to browser/components/loop/content/shared/js/crypto.js
index 22b0616d2451..b067698f44d1 100644
--- a/browser/extensions/loop/content/shared/js/crypto.js
+++ b/browser/components/loop/content/shared/js/crypto.js
@@ -18,7 +18,7 @@ var inChrome = typeof Components != "undefined" && "utils" in Components;
rootObject = {
crypto: crypto
};
- sharedUtils = Cu.import("chrome://loop/content/shared/js/utils.js", {}).utils;
+ sharedUtils = Cu.import("resource:///modules/loop/utils.js", {}).utils;
} else {
sharedUtils = this.shared.utils;
}
diff --git a/browser/extensions/loop/content/shared/js/dispatcher.js b/browser/components/loop/content/shared/js/dispatcher.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/dispatcher.js
rename to browser/components/loop/content/shared/js/dispatcher.js
diff --git a/browser/extensions/loop/content/shared/js/linkifiedTextView.js b/browser/components/loop/content/shared/js/linkifiedTextView.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/linkifiedTextView.js
rename to browser/components/loop/content/shared/js/linkifiedTextView.js
diff --git a/browser/extensions/loop/content/shared/js/linkifiedTextView.jsx b/browser/components/loop/content/shared/js/linkifiedTextView.jsx
similarity index 100%
rename from browser/extensions/loop/content/shared/js/linkifiedTextView.jsx
rename to browser/components/loop/content/shared/js/linkifiedTextView.jsx
diff --git a/browser/extensions/loop/content/shared/js/loopapi-client.js b/browser/components/loop/content/shared/js/loopapi-client.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/loopapi-client.js
rename to browser/components/loop/content/shared/js/loopapi-client.js
diff --git a/browser/extensions/loop/content/shared/js/mixins.js b/browser/components/loop/content/shared/js/mixins.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/mixins.js
rename to browser/components/loop/content/shared/js/mixins.js
diff --git a/browser/extensions/loop/content/shared/js/models.js b/browser/components/loop/content/shared/js/models.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/models.js
rename to browser/components/loop/content/shared/js/models.js
diff --git a/browser/extensions/loop/content/shared/js/otSdkDriver.js b/browser/components/loop/content/shared/js/otSdkDriver.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/otSdkDriver.js
rename to browser/components/loop/content/shared/js/otSdkDriver.js
diff --git a/browser/extensions/loop/content/shared/js/store.js b/browser/components/loop/content/shared/js/store.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/store.js
rename to browser/components/loop/content/shared/js/store.js
diff --git a/browser/extensions/loop/content/shared/js/textChatStore.js b/browser/components/loop/content/shared/js/textChatStore.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/textChatStore.js
rename to browser/components/loop/content/shared/js/textChatStore.js
diff --git a/browser/extensions/loop/content/shared/js/textChatView.js b/browser/components/loop/content/shared/js/textChatView.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/textChatView.js
rename to browser/components/loop/content/shared/js/textChatView.js
diff --git a/browser/extensions/loop/content/shared/js/textChatView.jsx b/browser/components/loop/content/shared/js/textChatView.jsx
similarity index 100%
rename from browser/extensions/loop/content/shared/js/textChatView.jsx
rename to browser/components/loop/content/shared/js/textChatView.jsx
diff --git a/browser/extensions/loop/content/shared/js/urlRegExps.js b/browser/components/loop/content/shared/js/urlRegExps.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/urlRegExps.js
rename to browser/components/loop/content/shared/js/urlRegExps.js
diff --git a/browser/extensions/loop/content/shared/js/utils.js b/browser/components/loop/content/shared/js/utils.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/utils.js
rename to browser/components/loop/content/shared/js/utils.js
diff --git a/browser/extensions/loop/content/shared/js/validate.js b/browser/components/loop/content/shared/js/validate.js
similarity index 100%
rename from browser/extensions/loop/content/shared/js/validate.js
rename to browser/components/loop/content/shared/js/validate.js
diff --git a/browser/extensions/loop/content/shared/js/views.js b/browser/components/loop/content/shared/js/views.js
similarity index 99%
rename from browser/extensions/loop/content/shared/js/views.js
rename to browser/components/loop/content/shared/js/views.js
index bdb6caea01d4..34cbc45c5fe9 100644
--- a/browser/extensions/loop/content/shared/js/views.js
+++ b/browser/components/loop/content/shared/js/views.js
@@ -854,7 +854,7 @@ loop.shared.views = (function(_, mozL10n) {
if (!thumbnail) {
thumbnail = this.props.useDesktopPaths ?
- "shared/img/icons-16x16.svg#globe" :
+ "loop/shared/img/icons-16x16.svg#globe" :
"shared/img/icons-16x16.svg#globe";
}
diff --git a/browser/extensions/loop/content/shared/js/views.jsx b/browser/components/loop/content/shared/js/views.jsx
similarity index 99%
rename from browser/extensions/loop/content/shared/js/views.jsx
rename to browser/components/loop/content/shared/js/views.jsx
index 723e739f29b4..9eb26b42e6e3 100644
--- a/browser/extensions/loop/content/shared/js/views.jsx
+++ b/browser/components/loop/content/shared/js/views.jsx
@@ -854,7 +854,7 @@ loop.shared.views = (function(_, mozL10n) {
if (!thumbnail) {
thumbnail = this.props.useDesktopPaths ?
- "shared/img/icons-16x16.svg#globe" :
+ "loop/shared/img/icons-16x16.svg#globe" :
"shared/img/icons-16x16.svg#globe";
}
diff --git a/browser/extensions/loop/content/shared/vendor/backbone-1.2.1.js b/browser/components/loop/content/shared/libs/backbone-1.2.1.js
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/backbone-1.2.1.js
rename to browser/components/loop/content/shared/libs/backbone-1.2.1.js
diff --git a/browser/extensions/loop/content/shared/vendor/classnames-2.2.0.js b/browser/components/loop/content/shared/libs/classnames-2.2.0.js
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/classnames-2.2.0.js
rename to browser/components/loop/content/shared/libs/classnames-2.2.0.js
diff --git a/browser/extensions/loop/content/shared/vendor/lodash-3.9.3.js b/browser/components/loop/content/shared/libs/lodash-3.9.3.js
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/lodash-3.9.3.js
rename to browser/components/loop/content/shared/libs/lodash-3.9.3.js
diff --git a/browser/extensions/loop/content/shared/vendor/react-0.13.3-prod.js b/browser/components/loop/content/shared/libs/react-0.13.3-prod.js
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/react-0.13.3-prod.js
rename to browser/components/loop/content/shared/libs/react-0.13.3-prod.js
diff --git a/browser/extensions/loop/content/shared/vendor/react-0.13.3.js b/browser/components/loop/content/shared/libs/react-0.13.3.js
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/react-0.13.3.js
rename to browser/components/loop/content/shared/libs/react-0.13.3.js
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/css/ot.css b/browser/components/loop/content/shared/libs/sdk-content/css/ot.css
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/css/ot.css
rename to browser/components/loop/content/shared/libs/sdk-content/css/ot.css
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-denied-chrome.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-denied-chrome.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-denied-chrome.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-denied-chrome.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-denied-copy-firefox.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-denied-copy-firefox.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-denied-copy-firefox.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-denied-copy-firefox.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-denied-firefox.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-denied-firefox.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-denied-firefox.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-denied-firefox.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-predenied-chrome.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-predenied-chrome.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-predenied-chrome.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-predenied-chrome.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-prompt-chrome.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-prompt-chrome.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/access-prompt-chrome.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/access-prompt-chrome.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/audioonly-publisher.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/audioonly-publisher.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/audioonly-publisher.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/audioonly-publisher.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/audioonly-subscriber.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/audioonly-subscriber.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/audioonly-subscriber.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/audioonly-subscriber.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/buttons.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/buttons.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/buttons.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/buttons.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/loader.gif b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/loader.gif
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/loader.gif
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/loader.gif
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/mic-off.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/mic-off.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/mic-off.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/mic-off.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/mic-on.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/mic-on.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/mic-on.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/mic-on.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/speaker-off.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/speaker-off.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/speaker-off.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/speaker-off.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/speaker-on.png b/browser/components/loop/content/shared/libs/sdk-content/images/rtc/speaker-on.png
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/images/rtc/speaker-on.png
rename to browser/components/loop/content/shared/libs/sdk-content/images/rtc/speaker-on.png
diff --git a/browser/extensions/loop/content/shared/vendor/sdk-content/js/dynamic_config.min.js b/browser/components/loop/content/shared/libs/sdk-content/js/dynamic_config.min.js
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk-content/js/dynamic_config.min.js
rename to browser/components/loop/content/shared/libs/sdk-content/js/dynamic_config.min.js
diff --git a/browser/extensions/loop/content/shared/vendor/sdk.js b/browser/components/loop/content/shared/libs/sdk.js
similarity index 100%
rename from browser/extensions/loop/content/shared/vendor/sdk.js
rename to browser/components/loop/content/shared/libs/sdk.js
diff --git a/browser/extensions/loop/content/shared/sounds/connected.ogg b/browser/components/loop/content/shared/sounds/connected.ogg
similarity index 100%
rename from browser/extensions/loop/content/shared/sounds/connected.ogg
rename to browser/components/loop/content/shared/sounds/connected.ogg
diff --git a/browser/extensions/loop/content/shared/sounds/connecting.ogg b/browser/components/loop/content/shared/sounds/connecting.ogg
similarity index 100%
rename from browser/extensions/loop/content/shared/sounds/connecting.ogg
rename to browser/components/loop/content/shared/sounds/connecting.ogg
diff --git a/browser/extensions/loop/content/shared/sounds/failure.ogg b/browser/components/loop/content/shared/sounds/failure.ogg
similarity index 100%
rename from browser/extensions/loop/content/shared/sounds/failure.ogg
rename to browser/components/loop/content/shared/sounds/failure.ogg
diff --git a/browser/extensions/loop/content/shared/sounds/message.ogg b/browser/components/loop/content/shared/sounds/message.ogg
similarity index 100%
rename from browser/extensions/loop/content/shared/sounds/message.ogg
rename to browser/components/loop/content/shared/sounds/message.ogg
diff --git a/browser/extensions/loop/content/shared/sounds/ringtone.ogg b/browser/components/loop/content/shared/sounds/ringtone.ogg
similarity index 100%
rename from browser/extensions/loop/content/shared/sounds/ringtone.ogg
rename to browser/components/loop/content/shared/sounds/ringtone.ogg
diff --git a/browser/extensions/loop/content/shared/sounds/room-joined-in.ogg b/browser/components/loop/content/shared/sounds/room-joined-in.ogg
similarity index 100%
rename from browser/extensions/loop/content/shared/sounds/room-joined-in.ogg
rename to browser/components/loop/content/shared/sounds/room-joined-in.ogg
diff --git a/browser/extensions/loop/content/shared/sounds/room-joined.ogg b/browser/components/loop/content/shared/sounds/room-joined.ogg
similarity index 100%
rename from browser/extensions/loop/content/shared/sounds/room-joined.ogg
rename to browser/components/loop/content/shared/sounds/room-joined.ogg
diff --git a/browser/extensions/loop/content/shared/sounds/room-left.ogg b/browser/components/loop/content/shared/sounds/room-left.ogg
similarity index 100%
rename from browser/extensions/loop/content/shared/sounds/room-left.ogg
rename to browser/components/loop/content/shared/sounds/room-left.ogg
diff --git a/browser/extensions/loop/content/shared/sounds/terminated.ogg b/browser/components/loop/content/shared/sounds/terminated.ogg
similarity index 100%
rename from browser/extensions/loop/content/shared/sounds/terminated.ogg
rename to browser/components/loop/content/shared/sounds/terminated.ogg
diff --git a/browser/components/loop/jar.mn b/browser/components/loop/jar.mn
new file mode 100644
index 000000000000..3532277924e4
--- /dev/null
+++ b/browser/components/loop/jar.mn
@@ -0,0 +1,136 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+browser.jar:
+ # Desktop html files
+ content/browser/loop/conversation.html (content/conversation.html)
+ content/browser/loop/panel.html (content/panel.html)
+
+ # Desktop libs (see bottom of this file for TokBox sdk assets)
+ content/browser/loop/libs/l10n.js (content/libs/l10n.js)
+
+ # Desktop script
+ content/browser/loop/js/conversation.js (content/js/conversation.js)
+ content/browser/loop/js/conversationAppStore.js (content/js/conversationAppStore.js)
+ content/browser/loop/js/otconfig.js (content/js/otconfig.js)
+ content/browser/loop/js/panel.js (content/js/panel.js)
+ content/browser/loop/js/roomStore.js (content/js/roomStore.js)
+ content/browser/loop/js/roomViews.js (content/js/roomViews.js)
+ content/browser/loop/js/feedbackViews.js (content/js/feedbackViews.js)
+
+ # Desktop styles
+ content/browser/loop/css/panel.css (content/css/panel.css)
+
+ # Shared styles
+ content/browser/loop/shared/css/reset.css (content/shared/css/reset.css)
+ content/browser/loop/shared/css/common.css (content/shared/css/common.css)
+ content/browser/loop/shared/css/conversation.css (content/shared/css/conversation.css)
+
+ # Shared images
+ content/browser/loop/shared/img/helloicon.svg (content/shared/img/helloicon.svg)
+ content/browser/loop/shared/img/icon_32.png (content/shared/img/icon_32.png)
+ content/browser/loop/shared/img/icon_64.png (content/shared/img/icon_64.png)
+ content/browser/loop/shared/img/spinner.svg (content/shared/img/spinner.svg)
+ # XXX could get rid of the png spinner usages and replace them with the svg
+ # one?
+ content/browser/loop/shared/img/spinner.png (content/shared/img/spinner.png)
+ content/browser/loop/shared/img/spinner@2x.png (content/shared/img/spinner@2x.png)
+ content/browser/loop/shared/img/sad_hello_icon_64x64.svg (content/shared/img/sad_hello_icon_64x64.svg)
+ content/browser/loop/shared/img/chatbubble-arrow-left.svg (content/shared/img/chatbubble-arrow-left.svg)
+ content/browser/loop/shared/img/chatbubble-arrow-right.svg (content/shared/img/chatbubble-arrow-right.svg)
+ content/browser/loop/shared/img/facemute-14x14.png (content/shared/img/facemute-14x14.png)
+ content/browser/loop/shared/img/facemute-14x14@2x.png (content/shared/img/facemute-14x14@2x.png)
+ content/browser/loop/shared/img/hangup-inverse-14x14.png (content/shared/img/hangup-inverse-14x14.png)
+ content/browser/loop/shared/img/hangup-inverse-14x14@2x.png (content/shared/img/hangup-inverse-14x14@2x.png)
+ content/browser/loop/shared/img/mute-inverse-14x14.png (content/shared/img/mute-inverse-14x14.png)
+ content/browser/loop/shared/img/mute-inverse-14x14@2x.png (content/shared/img/mute-inverse-14x14@2x.png)
+ content/browser/loop/shared/img/svg/glyph-email-16x16.svg (content/shared/img/svg/glyph-email-16x16.svg)
+ content/browser/loop/shared/img/svg/glyph-facebook-16x16.svg (content/shared/img/svg/glyph-facebook-16x16.svg)
+ content/browser/loop/shared/img/svg/glyph-help-16x16.svg (content/shared/img/svg/glyph-help-16x16.svg)
+ content/browser/loop/shared/img/svg/glyph-link-16x16.svg (content/shared/img/svg/glyph-link-16x16.svg)
+ content/browser/loop/shared/img/svg/glyph-user-16x16.svg (content/shared/img/svg/glyph-user-16x16.svg)
+ content/browser/loop/shared/img/svg/exit.svg (content/shared/img/svg/exit.svg)
+ content/browser/loop/shared/img/svg/audio.svg (content/shared/img/svg/audio.svg)
+ content/browser/loop/shared/img/svg/audio-hover.svg (content/shared/img/svg/audio-hover.svg)
+ content/browser/loop/shared/img/svg/audio-mute.svg (content/shared/img/svg/audio-mute.svg)
+ content/browser/loop/shared/img/svg/audio-mute-hover.svg (content/shared/img/svg/audio-mute-hover.svg)
+ content/browser/loop/shared/img/svg/video.svg (content/shared/img/svg/video.svg)
+ content/browser/loop/shared/img/svg/video-hover.svg (content/shared/img/svg/video-hover.svg)
+ content/browser/loop/shared/img/svg/video-mute.svg (content/shared/img/svg/video-mute.svg)
+ content/browser/loop/shared/img/svg/video-mute-hover.svg (content/shared/img/svg/video-mute-hover.svg)
+ content/browser/loop/shared/img/svg/settings.svg (content/shared/img/svg/settings.svg)
+ content/browser/loop/shared/img/svg/settings-hover.svg (content/shared/img/svg/settings-hover.svg)
+ content/browser/loop/shared/img/svg/sharing.svg (content/shared/img/svg/sharing.svg)
+ content/browser/loop/shared/img/svg/sharing-active.svg (content/shared/img/svg/sharing-active.svg)
+ content/browser/loop/shared/img/svg/sharing-pending.svg (content/shared/img/svg/sharing-pending.svg)
+ content/browser/loop/shared/img/svg/sharing-hover.svg (content/shared/img/svg/sharing-hover.svg)
+ content/browser/loop/shared/img/svg/media-group.svg (content/shared/img/svg/media-group.svg)
+ content/browser/loop/shared/img/svg/media-group-left-hover.svg (content/shared/img/svg/media-group-left-hover.svg)
+ content/browser/loop/shared/img/svg/media-group-right-hover.svg (content/shared/img/svg/media-group-right-hover.svg)
+ content/browser/loop/shared/img/audio-call-avatar.svg (content/shared/img/audio-call-avatar.svg)
+ content/browser/loop/shared/img/beta-ribbon.svg (content/shared/img/beta-ribbon.svg)
+ content/browser/loop/shared/img/check.svg (content/shared/img/check.svg)
+ content/browser/loop/shared/img/icons-10x10.svg (content/shared/img/icons-10x10.svg)
+ content/browser/loop/shared/img/icons-14x14.svg (content/shared/img/icons-14x14.svg)
+ content/browser/loop/shared/img/icons-16x16.svg (content/shared/img/icons-16x16.svg)
+ content/browser/loop/shared/img/movistar.png (content/shared/img/movistar.png)
+ content/browser/loop/shared/img/movistar@2x.png (content/shared/img/movistar@2x.png)
+ content/browser/loop/shared/img/vivo.png (content/shared/img/vivo.png)
+ content/browser/loop/shared/img/vivo@2x.png (content/shared/img/vivo@2x.png)
+ content/browser/loop/shared/img/02.png (content/shared/img/02.png)
+ content/browser/loop/shared/img/02@2x.png (content/shared/img/02@2x.png)
+ content/browser/loop/shared/img/telefonica.png (content/shared/img/telefonica.png)
+ content/browser/loop/shared/img/hello_logo.svg (content/shared/img/hello_logo.svg)
+ content/browser/loop/shared/img/telefonica@2x.png (content/shared/img/telefonica@2x.png)
+ content/browser/loop/shared/img/ellipsis-v.svg (content/shared/img/ellipsis-v.svg)
+ content/browser/loop/shared/img/empty_conversations.svg (content/shared/img/empty_conversations.svg)
+ content/browser/loop/shared/img/empty_search.svg (content/shared/img/empty_search.svg)
+ content/browser/loop/shared/img/animated-spinner.svg (content/shared/img/animated-spinner.svg)
+ content/browser/loop/shared/img/avatars.svg (content/shared/img/avatars.svg)
+ content/browser/loop/shared/img/firefox-avatar.svg (content/shared/img/firefox-avatar.svg)
+ content/browser/loop/shared/img/pause-12x12.svg (content/shared/img/pause-12x12.svg)
+ content/browser/loop/shared/img/play-12x12.svg (content/shared/img/play-12x12.svg)
+ content/browser/loop/shared/img/stop-12x12.svg (content/shared/img/stop-12x12.svg)
+
+ # Shared scripts
+ content/browser/loop/shared/js/actions.js (content/shared/js/actions.js)
+ content/browser/loop/shared/js/store.js (content/shared/js/store.js)
+ content/browser/loop/shared/js/activeRoomStore.js (content/shared/js/activeRoomStore.js)
+ content/browser/loop/shared/js/dispatcher.js (content/shared/js/dispatcher.js)
+ content/browser/loop/shared/js/linkifiedTextView.js (content/shared/js/linkifiedTextView.js)
+ content/browser/loop/shared/js/loopapi-client.js (content/shared/js/loopapi-client.js)
+ content/browser/loop/shared/js/models.js (content/shared/js/models.js)
+ content/browser/loop/shared/js/mixins.js (content/shared/js/mixins.js)
+ content/browser/loop/shared/js/otSdkDriver.js (content/shared/js/otSdkDriver.js)
+ content/browser/loop/shared/js/views.js (content/shared/js/views.js)
+ content/browser/loop/shared/js/textChatStore.js (content/shared/js/textChatStore.js)
+ content/browser/loop/shared/js/textChatView.js (content/shared/js/textChatView.js)
+ content/browser/loop/shared/js/urlRegExps.js (content/shared/js/urlRegExps.js)
+ content/browser/loop/shared/js/utils.js (content/shared/js/utils.js)
+ content/browser/loop/shared/js/validate.js (content/shared/js/validate.js)
+
+ # Shared libs
+#ifdef DEBUG
+ content/browser/loop/shared/libs/react-0.13.3.js (content/shared/libs/react-0.13.3.js)
+#else
+ content/browser/loop/shared/libs/react-0.13.3.js (content/shared/libs/react-0.13.3-prod.js)
+#endif
+ content/browser/loop/shared/libs/lodash-3.9.3.js (content/shared/libs/lodash-3.9.3.js)
+ content/browser/loop/shared/libs/backbone-1.2.1.js (content/shared/libs/backbone-1.2.1.js)
+ content/browser/loop/shared/libs/classnames-2.2.0.js (content/shared/libs/classnames-2.2.0.js)
+
+ # Shared sounds
+ content/browser/loop/shared/sounds/ringtone.ogg (content/shared/sounds/ringtone.ogg)
+ content/browser/loop/shared/sounds/connecting.ogg (content/shared/sounds/connecting.ogg)
+ content/browser/loop/shared/sounds/connected.ogg (content/shared/sounds/connected.ogg)
+ content/browser/loop/shared/sounds/terminated.ogg (content/shared/sounds/terminated.ogg)
+ content/browser/loop/shared/sounds/room-joined.ogg (content/shared/sounds/room-joined.ogg)
+ content/browser/loop/shared/sounds/room-joined-in.ogg (content/shared/sounds/room-joined-in.ogg)
+ content/browser/loop/shared/sounds/room-left.ogg (content/shared/sounds/room-left.ogg)
+ content/browser/loop/shared/sounds/failure.ogg (content/shared/sounds/failure.ogg)
+ content/browser/loop/shared/sounds/message.ogg (content/shared/sounds/message.ogg)
+
+ # Partner SDK assets
+ content/browser/loop/libs/sdk.js (content/shared/libs/sdk.js)
+ content/browser/loop/sdk-content/js/dynamic_config.min.js (content/shared/libs/sdk-content/js/dynamic_config.min.js)
diff --git a/browser/extensions/loop/manifest.ini b/browser/components/loop/manifest.ini
similarity index 100%
rename from browser/extensions/loop/manifest.ini
rename to browser/components/loop/manifest.ini
diff --git a/browser/components/loop/modules/.eslintrc b/browser/components/loop/modules/.eslintrc
new file mode 100644
index 000000000000..de960d6e5eec
--- /dev/null
+++ b/browser/components/loop/modules/.eslintrc
@@ -0,0 +1,3 @@
+{
+ "extends": "../.eslintrc-gecko"
+}
diff --git a/browser/extensions/loop/content/modules/LoopRooms.jsm b/browser/components/loop/modules/LoopRooms.jsm
similarity index 99%
rename from browser/extensions/loop/content/modules/LoopRooms.jsm
rename to browser/components/loop/modules/LoopRooms.jsm
index 7665ef5e9616..22b5541e270f 100644
--- a/browser/extensions/loop/content/modules/LoopRooms.jsm
+++ b/browser/components/loop/modules/LoopRooms.jsm
@@ -10,7 +10,7 @@ Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/Task.jsm");
Cu.import("resource://gre/modules/Timer.jsm");
-const { MozLoopService, LOOP_SESSION_TYPE } = Cu.import("chrome://loop/content/modules/MozLoopService.jsm", {});
+const { MozLoopService, LOOP_SESSION_TYPE } = Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
XPCOMUtils.defineLazyModuleGetter(this, "Promise",
"resource://gre/modules/Promise.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "CommonUtils",
@@ -27,11 +27,11 @@ XPCOMUtils.defineLazyGetter(this, "gLoopBundle", function() {
});
XPCOMUtils.defineLazyModuleGetter(this, "LoopRoomsCache",
- "chrome://loop/content/modules/LoopRoomsCache.jsm");
+ "resource:///modules/loop/LoopRoomsCache.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "loopUtils",
- "chrome://loop/content/modules/utils.js", "utils");
+ "resource:///modules/loop/utils.js", "utils");
XPCOMUtils.defineLazyModuleGetter(this, "loopCrypto",
- "chrome://loop/content/shared/js/crypto.js", "LoopCrypto");
+ "resource:///modules/loop/crypto.js", "LoopCrypto");
XPCOMUtils.defineLazyModuleGetter(this, "ObjectUtils",
"resource://gre/modules/ObjectUtils.jsm");
diff --git a/browser/extensions/loop/content/modules/LoopRoomsCache.jsm b/browser/components/loop/modules/LoopRoomsCache.jsm
similarity index 98%
rename from browser/extensions/loop/content/modules/LoopRoomsCache.jsm
rename to browser/components/loop/modules/LoopRoomsCache.jsm
index de123d2e3d6b..f1265a6611b6 100644
--- a/browser/extensions/loop/content/modules/LoopRoomsCache.jsm
+++ b/browser/components/loop/modules/LoopRoomsCache.jsm
@@ -9,7 +9,7 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/Task.jsm");
const { MozLoopService, LOOP_SESSION_TYPE } =
- Cu.import("chrome://loop/content/modules/MozLoopService.jsm", {});
+ Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
XPCOMUtils.defineLazyModuleGetter(this, "CommonUtils",
"resource://services-common/utils.js");
XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm");
diff --git a/browser/extensions/loop/content/modules/MozLoopAPI.jsm b/browser/components/loop/modules/MozLoopAPI.jsm
similarity index 99%
rename from browser/extensions/loop/content/modules/MozLoopAPI.jsm
rename to browser/components/loop/modules/MozLoopAPI.jsm
index 49f4a30b2604..70638ee9fe3e 100644
--- a/browser/extensions/loop/content/modules/MozLoopAPI.jsm
+++ b/browser/components/loop/modules/MozLoopAPI.jsm
@@ -9,8 +9,8 @@ const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
Cu.import("resource://services-common/utils.js");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("chrome://loop/content/modules/MozLoopService.jsm");
-Cu.import("chrome://loop/content/modules/LoopRooms.jsm");
+Cu.import("resource:///modules/loop/MozLoopService.jsm");
+Cu.import("resource:///modules/loop/LoopRooms.jsm");
Cu.importGlobalProperties(["Blob"]);
XPCOMUtils.defineLazyModuleGetter(this, "PageMetadata",
diff --git a/browser/extensions/loop/content/modules/MozLoopPushHandler.jsm b/browser/components/loop/modules/MozLoopPushHandler.jsm
similarity index 99%
rename from browser/extensions/loop/content/modules/MozLoopPushHandler.jsm
rename to browser/components/loop/modules/MozLoopPushHandler.jsm
index cb10cea3f6ad..8be93ff80f7c 100644
--- a/browser/extensions/loop/content/modules/MozLoopPushHandler.jsm
+++ b/browser/components/loop/modules/MozLoopPushHandler.jsm
@@ -10,7 +10,7 @@ Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Timer.jsm");
-const { MozLoopService } = Cu.import("chrome://loop/content/modules/MozLoopService.jsm", {});
+const { MozLoopService } = Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
const consoleLog = MozLoopService.log;
this.EXPORTED_SYMBOLS = ["MozLoopPushHandler"];
diff --git a/browser/extensions/loop/content/modules/MozLoopService.jsm b/browser/components/loop/modules/MozLoopService.jsm
similarity index 99%
rename from browser/extensions/loop/content/modules/MozLoopService.jsm
rename to browser/components/loop/modules/MozLoopService.jsm
index 43e3c5609370..15c8bae30773 100644
--- a/browser/extensions/loop/content/modules/MozLoopService.jsm
+++ b/browser/components/loop/modules/MozLoopService.jsm
@@ -121,14 +121,14 @@ XPCOMUtils.defineConstant(this, "ROOM_DELETE", ROOM_DELETE);
XPCOMUtils.defineConstant(this, "ROOM_CONTEXT_ADD", ROOM_CONTEXT_ADD);
XPCOMUtils.defineLazyModuleGetter(this, "LoopAPI",
- "chrome://loop/content/modules/MozLoopAPI.jsm");
+ "resource:///modules/loop/MozLoopAPI.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "convertToRTCStatsReport",
"resource://gre/modules/media/RTCStatsReport.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "loopUtils",
- "chrome://loop/content/modules/utils.js", "utils");
+ "resource:///modules/loop/utils.js", "utils");
XPCOMUtils.defineLazyModuleGetter(this, "loopCrypto",
- "chrome://loop/content/shared/js/crypto.js", "LoopCrypto");
+ "resource:///modules/loop/crypto.js", "LoopCrypto");
XPCOMUtils.defineLazyModuleGetter(this, "Chat", "resource:///modules/Chat.jsm");
@@ -151,13 +151,13 @@ XPCOMUtils.defineLazyModuleGetter(this, "hookWindowCloseForPanelClose",
"resource://gre/modules/MozSocialAPI.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "LoopRooms",
- "chrome://loop/content/modules/LoopRooms.jsm");
+ "resource:///modules/loop/LoopRooms.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "roomsPushNotification",
- "chrome://loop/content/modules/LoopRooms.jsm");
+ "resource:///modules/loop/LoopRooms.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "MozLoopPushHandler",
- "chrome://loop/content/modules/MozLoopPushHandler.jsm");
+ "resource:///modules/loop/MozLoopPushHandler.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "UITour",
"resource:///modules/UITour.jsm");
diff --git a/browser/extensions/loop/content/modules/MozLoopWorker.js b/browser/components/loop/modules/MozLoopWorker.js
similarity index 100%
rename from browser/extensions/loop/content/modules/MozLoopWorker.js
rename to browser/components/loop/modules/MozLoopWorker.js
diff --git a/browser/extensions/loop/moz.build b/browser/components/loop/moz.build
similarity index 64%
rename from browser/extensions/loop/moz.build
rename to browser/components/loop/moz.build
index f53a007a2cab..b76d562ec638 100644
--- a/browser/extensions/loop/moz.build
+++ b/browser/components/loop/moz.build
@@ -4,16 +4,6 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-FINAL_TARGET = 'dist/bin/browser/features/loop@mozilla.org'
-
-FINAL_TARGET_FILES += [
- 'bootstrap.js'
-]
-
-DIST_FILES += [
- 'install.rdf.in'
-]
-
JAR_MANIFESTS += ['jar.mn']
XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell/xpcshell.ini']
@@ -22,5 +12,16 @@ BROWSER_CHROME_MANIFESTS += [
'test/mochitest/browser.ini',
]
+EXTRA_JS_MODULES.loop += [
+ 'content/shared/js/crypto.js',
+ 'content/shared/js/utils.js',
+ 'modules/LoopRooms.jsm',
+ 'modules/LoopRoomsCache.jsm',
+ 'modules/MozLoopAPI.jsm',
+ 'modules/MozLoopPushHandler.jsm',
+ 'modules/MozLoopService.jsm',
+ 'modules/MozLoopWorker.js',
+]
+
with Files('**'):
BUG_COMPONENT = ('Loop', 'Client')
diff --git a/browser/extensions/loop/run-all-loop-tests.sh b/browser/components/loop/run-all-loop-tests.sh
similarity index 94%
rename from browser/extensions/loop/run-all-loop-tests.sh
rename to browser/components/loop/run-all-loop-tests.sh
index dee165708fc5..2628c0b1aed2 100755
--- a/browser/extensions/loop/run-all-loop-tests.sh
+++ b/browser/components/loop/run-all-loop-tests.sh
@@ -12,7 +12,7 @@ set -e
# Main tests
-LOOPDIR=browser/extensions/loop
+LOOPDIR=browser/components/loop
ESLINT=standalone/node_modules/.bin/eslint
if [ -x "${LOOPDIR}/${ESLINT}" ]; then
echo 'running eslint; see http://eslint.org/docs/rules/ for error info'
@@ -25,7 +25,7 @@ fi
# Build tests coverage.
MISSINGDEPSMSG="\nMake sure all dependencies are up to date by running
-'npm install' inside the 'browser/extensions/loop/test/' directory.\n"
+'npm install' inside the 'browser/components/loop/test/' directory.\n"
(
cd ${LOOPDIR}/test
if ! npm run-script build-coverage ; then
diff --git a/browser/extensions/loop/standalone/.gitignore b/browser/components/loop/standalone/.gitignore
similarity index 100%
rename from browser/extensions/loop/standalone/.gitignore
rename to browser/components/loop/standalone/.gitignore
diff --git a/browser/extensions/loop/standalone/Makefile b/browser/components/loop/standalone/Makefile
similarity index 100%
rename from browser/extensions/loop/standalone/Makefile
rename to browser/components/loop/standalone/Makefile
diff --git a/browser/extensions/loop/standalone/README.md b/browser/components/loop/standalone/README.md
similarity index 100%
rename from browser/extensions/loop/standalone/README.md
rename to browser/components/loop/standalone/README.md
diff --git a/browser/extensions/loop/standalone/content/css/webapp.css b/browser/components/loop/standalone/content/css/webapp.css
similarity index 97%
rename from browser/extensions/loop/standalone/content/css/webapp.css
rename to browser/components/loop/standalone/content/css/webapp.css
index 525608decf9b..bc46ed3d9e9d 100644
--- a/browser/extensions/loop/standalone/content/css/webapp.css
+++ b/browser/components/loop/standalone/content/css/webapp.css
@@ -87,7 +87,7 @@ html[dir="rtl"] .standalone-overlay-wrapper > .general-support-url {
background-size: contain;
width: 16px;
height: 16px;
- background: transparent url("../shared/img/glyph-help-16x16.svg") no-repeat;
+ background: transparent url("../shared/img/svg/glyph-help-16x16.svg") no-repeat;
}
.standalone-overlay-wrapper > .standalone-moz-logo {
@@ -271,7 +271,7 @@ html[dir="rtl"] .standalone-overlay-wrapper > .standalone-moz-logo {
}
.room-inner-info-area > .room-waiting-area > a >.room-waiting-help {
- background: transparent url("../shared/img/glyph-help-16x16.svg") no-repeat;
+ background: transparent url("../shared/img/svg/glyph-help-16x16.svg") no-repeat;
display: inline-block;
height: 16px;
margin-left: 5px;
diff --git a/browser/extensions/loop/standalone/content/favicon.ico b/browser/components/loop/standalone/content/favicon.ico
similarity index 100%
rename from browser/extensions/loop/standalone/content/favicon.ico
rename to browser/components/loop/standalone/content/favicon.ico
diff --git a/browser/extensions/loop/standalone/content/img/gum-chrome.svg b/browser/components/loop/standalone/content/img/gum-chrome.svg
similarity index 100%
rename from browser/extensions/loop/standalone/content/img/gum-chrome.svg
rename to browser/components/loop/standalone/content/img/gum-chrome.svg
diff --git a/browser/extensions/loop/standalone/content/img/gum-firefox.svg b/browser/components/loop/standalone/content/img/gum-firefox.svg
similarity index 100%
rename from browser/extensions/loop/standalone/content/img/gum-firefox.svg
rename to browser/components/loop/standalone/content/img/gum-firefox.svg
diff --git a/browser/extensions/loop/standalone/content/img/gum-opera.svg b/browser/components/loop/standalone/content/img/gum-opera.svg
similarity index 100%
rename from browser/extensions/loop/standalone/content/img/gum-opera.svg
rename to browser/components/loop/standalone/content/img/gum-opera.svg
diff --git a/browser/extensions/loop/standalone/content/img/gum-others.svg b/browser/components/loop/standalone/content/img/gum-others.svg
similarity index 100%
rename from browser/extensions/loop/standalone/content/img/gum-others.svg
rename to browser/components/loop/standalone/content/img/gum-others.svg
diff --git a/browser/extensions/loop/standalone/content/img/hello-logo-text.svg b/browser/components/loop/standalone/content/img/hello-logo-text.svg
similarity index 100%
rename from browser/extensions/loop/standalone/content/img/hello-logo-text.svg
rename to browser/components/loop/standalone/content/img/hello-logo-text.svg
diff --git a/browser/extensions/loop/standalone/content/img/logo.png b/browser/components/loop/standalone/content/img/logo.png
similarity index 100%
rename from browser/extensions/loop/standalone/content/img/logo.png
rename to browser/components/loop/standalone/content/img/logo.png
diff --git a/browser/extensions/loop/standalone/content/img/mozilla-logo.svg b/browser/components/loop/standalone/content/img/mozilla-logo.svg
similarity index 100%
rename from browser/extensions/loop/standalone/content/img/mozilla-logo.svg
rename to browser/components/loop/standalone/content/img/mozilla-logo.svg
diff --git a/browser/extensions/loop/standalone/content/index.html b/browser/components/loop/standalone/content/index.html
similarity index 100%
rename from browser/extensions/loop/standalone/content/index.html
rename to browser/components/loop/standalone/content/index.html
diff --git a/browser/extensions/loop/standalone/content/js/standaloneAppStore.js b/browser/components/loop/standalone/content/js/standaloneAppStore.js
similarity index 100%
rename from browser/extensions/loop/standalone/content/js/standaloneAppStore.js
rename to browser/components/loop/standalone/content/js/standaloneAppStore.js
diff --git a/browser/extensions/loop/standalone/content/js/standaloneMetricsStore.js b/browser/components/loop/standalone/content/js/standaloneMetricsStore.js
similarity index 100%
rename from browser/extensions/loop/standalone/content/js/standaloneMetricsStore.js
rename to browser/components/loop/standalone/content/js/standaloneMetricsStore.js
diff --git a/browser/extensions/loop/standalone/content/js/standaloneMozLoop.js b/browser/components/loop/standalone/content/js/standaloneMozLoop.js
similarity index 100%
rename from browser/extensions/loop/standalone/content/js/standaloneMozLoop.js
rename to browser/components/loop/standalone/content/js/standaloneMozLoop.js
diff --git a/browser/extensions/loop/standalone/content/js/standaloneRoomViews.js b/browser/components/loop/standalone/content/js/standaloneRoomViews.js
similarity index 100%
rename from browser/extensions/loop/standalone/content/js/standaloneRoomViews.js
rename to browser/components/loop/standalone/content/js/standaloneRoomViews.js
diff --git a/browser/extensions/loop/standalone/content/js/standaloneRoomViews.jsx b/browser/components/loop/standalone/content/js/standaloneRoomViews.jsx
similarity index 100%
rename from browser/extensions/loop/standalone/content/js/standaloneRoomViews.jsx
rename to browser/components/loop/standalone/content/js/standaloneRoomViews.jsx
diff --git a/browser/extensions/loop/standalone/content/js/webapp.js b/browser/components/loop/standalone/content/js/webapp.js
similarity index 100%
rename from browser/extensions/loop/standalone/content/js/webapp.js
rename to browser/components/loop/standalone/content/js/webapp.js
diff --git a/browser/extensions/loop/standalone/content/js/webapp.jsx b/browser/components/loop/standalone/content/js/webapp.jsx
similarity index 100%
rename from browser/extensions/loop/standalone/content/js/webapp.jsx
rename to browser/components/loop/standalone/content/js/webapp.jsx
diff --git a/browser/extensions/loop/standalone/content/l10n/en-US/loop.properties b/browser/components/loop/standalone/content/l10n/en-US/loop.properties
similarity index 100%
rename from browser/extensions/loop/standalone/content/l10n/en-US/loop.properties
rename to browser/components/loop/standalone/content/l10n/en-US/loop.properties
diff --git a/browser/extensions/loop/standalone/content/libs/l10n-gaia-02ca67948fe8.js b/browser/components/loop/standalone/content/libs/l10n-gaia-02ca67948fe8.js
similarity index 100%
rename from browser/extensions/loop/standalone/content/libs/l10n-gaia-02ca67948fe8.js
rename to browser/components/loop/standalone/content/libs/l10n-gaia-02ca67948fe8.js
diff --git a/browser/extensions/loop/standalone/content/libs/l10n-gaia-upstream.txt b/browser/components/loop/standalone/content/libs/l10n-gaia-upstream.txt
similarity index 100%
rename from browser/extensions/loop/standalone/content/libs/l10n-gaia-upstream.txt
rename to browser/components/loop/standalone/content/libs/l10n-gaia-upstream.txt
diff --git a/browser/extensions/loop/standalone/content/robots.txt b/browser/components/loop/standalone/content/robots.txt
similarity index 100%
rename from browser/extensions/loop/standalone/content/robots.txt
rename to browser/components/loop/standalone/content/robots.txt
diff --git a/browser/extensions/loop/standalone/content/webappEntryPoint.js b/browser/components/loop/standalone/content/webappEntryPoint.js
similarity index 93%
rename from browser/extensions/loop/standalone/content/webappEntryPoint.js
rename to browser/components/loop/standalone/content/webappEntryPoint.js
index 526e3708fe6f..73f7eeec03ce 100644
--- a/browser/extensions/loop/standalone/content/webappEntryPoint.js
+++ b/browser/components/loop/standalone/content/webappEntryPoint.js
@@ -17,20 +17,20 @@
// The OpenTok SDK tries to do some heuristic detection of require and
// assumes a node environment if it's present, which confuses webpack, so
// we turn that off by forcing require to false in that context.
-require("imports?require=>false!shared/vendor/sdk.js");
+require("imports?require=>false!shared/libs/sdk.js");
// Ultimately, we'll likely want to pull the vendor libraries from npm, as that
// makes upgrading easier, and it's generally better practice to minify the
// "source" versions of libraries rather than built artifacts. We probably do
// want to minify them ourselves since this allows for better dead-code
// elimination, but that can be a bit of judgement call.
-require("exports?_!shared/vendor/lodash-3.9.3.js");
+require("exports?_!shared/libs/lodash-3.9.3.js");
// Disable Backbone's AMD auto-detection, as described at:
//
// https://github.com/jashkenas/backbone/wiki/Using-Backbone-without-jQuery
//
-require("expose?Backbone!imports?define=>false!shared/vendor/backbone-1.2.1.js");
+require("expose?Backbone!imports?define=>false!shared/libs/backbone-1.2.1.js");
/* global: __PROD__ */
if (typeof __PROD__ !== "undefined") {
@@ -41,8 +41,8 @@ if (typeof __PROD__ !== "undefined") {
require("expose?classNames!classnames");
} else {
// our development server setup doesn't yet handle real modules, so for now...
- require("shared/vendor/react-0.13.3.js");
- require("shared/vendor/classnames-2.2.0.js");
+ require("shared/libs/react-0.13.3.js");
+ require("shared/libs/classnames-2.2.0.js");
}
diff --git a/browser/extensions/loop/standalone/package.json b/browser/components/loop/standalone/package.json
similarity index 100%
rename from browser/extensions/loop/standalone/package.json
rename to browser/components/loop/standalone/package.json
diff --git a/browser/extensions/loop/standalone/server.js b/browser/components/loop/standalone/server.js
similarity index 95%
rename from browser/extensions/loop/standalone/server.js
rename to browser/components/loop/standalone/server.js
index 3c6cb09f4b40..5c178c34ea7f 100644
--- a/browser/extensions/loop/standalone/server.js
+++ b/browser/components/loop/standalone/server.js
@@ -90,10 +90,6 @@ app.use("/content/c", express.static(path.join(__dirname, "..", "content")));
// Two lines for the same reason as /content above.
app.use("/test", express.static(path.join(__dirname, "test")));
app.use("/test", express.static(path.join(__dirname, "..", "test")));
-// Hacks for desktop to stop errors being raised in the tests for content loading.
-app.use("/test/shared/shared", express.static(path.join(__dirname, "..", "content/shared")));
-app.use("/test/desktop-local/shared", express.static(path.join(__dirname, "..", "content/shared")));
-
// As we don't have hashes on the urls, the best way to serve the index files
// appears to be to be to closely filter the url and match appropriately.
diff --git a/browser/extensions/loop/standalone/webpack.config.js b/browser/components/loop/standalone/webpack.config.js
similarity index 100%
rename from browser/extensions/loop/standalone/webpack.config.js
rename to browser/components/loop/standalone/webpack.config.js
diff --git a/browser/extensions/loop/test/.eslintrc b/browser/components/loop/test/.eslintrc
similarity index 100%
rename from browser/extensions/loop/test/.eslintrc
rename to browser/components/loop/test/.eslintrc
diff --git a/browser/extensions/loop/test/coverage/index.html b/browser/components/loop/test/coverage/index.html
similarity index 100%
rename from browser/extensions/loop/test/coverage/index.html
rename to browser/components/loop/test/coverage/index.html
diff --git a/browser/extensions/loop/test/desktop-local/.eslintrc b/browser/components/loop/test/desktop-local/.eslintrc
similarity index 100%
rename from browser/extensions/loop/test/desktop-local/.eslintrc
rename to browser/components/loop/test/desktop-local/.eslintrc
diff --git a/browser/extensions/loop/test/desktop-local/README.md b/browser/components/loop/test/desktop-local/README.md
similarity index 89%
rename from browser/extensions/loop/test/desktop-local/README.md
rename to browser/components/loop/test/desktop-local/README.md
index 43dc73c5c315..5f459e32fc4a 100644
--- a/browser/extensions/loop/test/desktop-local/README.md
+++ b/browser/components/loop/test/desktop-local/README.md
@@ -11,7 +11,7 @@ a file: or HTTP URL to run the tests. Alternately, from the top-level of your
Gecko source directory, execute:
```
-./mach marionette-test browser/extensions/loop/test/manifest.ini
+./mach marionette-test browser/components/loop/test/manifest.ini
```
Next steps:
diff --git a/browser/extensions/loop/test/desktop-local/conversationAppStore_test.js b/browser/components/loop/test/desktop-local/conversationAppStore_test.js
similarity index 100%
rename from browser/extensions/loop/test/desktop-local/conversationAppStore_test.js
rename to browser/components/loop/test/desktop-local/conversationAppStore_test.js
diff --git a/browser/extensions/loop/test/desktop-local/conversation_test.js b/browser/components/loop/test/desktop-local/conversation_test.js
similarity index 100%
rename from browser/extensions/loop/test/desktop-local/conversation_test.js
rename to browser/components/loop/test/desktop-local/conversation_test.js
diff --git a/browser/extensions/loop/test/desktop-local/feedbackViews_test.js b/browser/components/loop/test/desktop-local/feedbackViews_test.js
similarity index 100%
rename from browser/extensions/loop/test/desktop-local/feedbackViews_test.js
rename to browser/components/loop/test/desktop-local/feedbackViews_test.js
diff --git a/browser/extensions/loop/test/desktop-local/index.html b/browser/components/loop/test/desktop-local/index.html
similarity index 77%
rename from browser/extensions/loop/test/desktop-local/index.html
rename to browser/components/loop/test/desktop-local/index.html
index f434148925e3..d5108f264576 100644
--- a/browser/extensions/loop/test/desktop-local/index.html
+++ b/browser/components/loop/test/desktop-local/index.html
@@ -14,17 +14,17 @@
-
+
-
-
-
-
+
+
+
+
@@ -50,12 +50,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/browser/extensions/loop/test/desktop-local/l10n_test.js b/browser/components/loop/test/desktop-local/l10n_test.js
similarity index 100%
rename from browser/extensions/loop/test/desktop-local/l10n_test.js
rename to browser/components/loop/test/desktop-local/l10n_test.js
diff --git a/browser/extensions/loop/test/desktop-local/panel_test.js b/browser/components/loop/test/desktop-local/panel_test.js
similarity index 100%
rename from browser/extensions/loop/test/desktop-local/panel_test.js
rename to browser/components/loop/test/desktop-local/panel_test.js
diff --git a/browser/extensions/loop/test/desktop-local/roomStore_test.js b/browser/components/loop/test/desktop-local/roomStore_test.js
similarity index 100%
rename from browser/extensions/loop/test/desktop-local/roomStore_test.js
rename to browser/components/loop/test/desktop-local/roomStore_test.js
diff --git a/browser/extensions/loop/test/desktop-local/roomViews_test.js b/browser/components/loop/test/desktop-local/roomViews_test.js
similarity index 100%
rename from browser/extensions/loop/test/desktop-local/roomViews_test.js
rename to browser/components/loop/test/desktop-local/roomViews_test.js
diff --git a/browser/extensions/loop/test/desktop-local/test_desktop_all.py b/browser/components/loop/test/desktop-local/test_desktop_all.py
similarity index 100%
rename from browser/extensions/loop/test/desktop-local/test_desktop_all.py
rename to browser/components/loop/test/desktop-local/test_desktop_all.py
diff --git a/browser/extensions/loop/test/functional/config.py b/browser/components/loop/test/functional/config.py
similarity index 100%
rename from browser/extensions/loop/test/functional/config.py
rename to browser/components/loop/test/functional/config.py
diff --git a/browser/extensions/loop/test/functional/hanging_threads.py b/browser/components/loop/test/functional/hanging_threads.py
similarity index 100%
rename from browser/extensions/loop/test/functional/hanging_threads.py
rename to browser/components/loop/test/functional/hanging_threads.py
diff --git a/browser/extensions/loop/test/functional/manifest.ini b/browser/components/loop/test/functional/manifest.ini
similarity index 100%
rename from browser/extensions/loop/test/functional/manifest.ini
rename to browser/components/loop/test/functional/manifest.ini
diff --git a/browser/extensions/loop/test/functional/serversetup.py b/browser/components/loop/test/functional/serversetup.py
similarity index 100%
rename from browser/extensions/loop/test/functional/serversetup.py
rename to browser/components/loop/test/functional/serversetup.py
diff --git a/browser/extensions/loop/test/functional/test_1_browser_call.py b/browser/components/loop/test/functional/test_1_browser_call.py
similarity index 100%
rename from browser/extensions/loop/test/functional/test_1_browser_call.py
rename to browser/components/loop/test/functional/test_1_browser_call.py
diff --git a/browser/extensions/loop/test/index.html b/browser/components/loop/test/index.html
similarity index 100%
rename from browser/extensions/loop/test/index.html
rename to browser/components/loop/test/index.html
diff --git a/browser/extensions/loop/test/karma/head.js b/browser/components/loop/test/karma/head.js
similarity index 100%
rename from browser/extensions/loop/test/karma/head.js
rename to browser/components/loop/test/karma/head.js
diff --git a/browser/extensions/loop/test/karma/karma.conf.base.js b/browser/components/loop/test/karma/karma.conf.base.js
similarity index 100%
rename from browser/extensions/loop/test/karma/karma.conf.base.js
rename to browser/components/loop/test/karma/karma.conf.base.js
diff --git a/browser/extensions/loop/test/karma/karma.coverage.desktop.js b/browser/components/loop/test/karma/karma.coverage.desktop.js
similarity index 75%
rename from browser/extensions/loop/test/karma/karma.coverage.desktop.js
rename to browser/components/loop/test/karma/karma.coverage.desktop.js
index 67f43865cf92..6863e06041e7 100644
--- a/browser/extensions/loop/test/karma/karma.coverage.desktop.js
+++ b/browser/components/loop/test/karma/karma.coverage.desktop.js
@@ -10,11 +10,11 @@ module.exports = function(config) {
// List of files / patterns to load in the browser.
baseConfig.files = baseConfig.files.concat([
- "content/panels/vendor/l10n.js",
- "content/shared/vendor/react-0.13.3.js",
- "content/shared/vendor/classnames-2.2.0.js",
- "content/shared/vendor/lodash-3.9.3.js",
- "content/shared/vendor/backbone-1.2.1.js",
+ "content/libs/l10n.js",
+ "content/shared/libs/react-0.13.3.js",
+ "content/shared/libs/classnames-2.2.0.js",
+ "content/shared/libs/lodash-3.9.3.js",
+ "content/shared/libs/backbone-1.2.1.js",
"test/shared/vendor/*.js",
"test/shared/loop_mocha_utils.js",
"test/karma/head.js", // Stub out DOM event listener due to races.
@@ -31,11 +31,11 @@ module.exports = function(config) {
"content/shared/js/views.js",
"content/shared/js/textChatStore.js",
"content/shared/js/textChatView.js",
- "content/panels/js/feedbackViews.js",
- "content/panels/js/conversationAppStore.js",
- "content/panels/js/roomStore.js",
- "content/panels/js/roomViews.js",
- "content/panels/js/conversation.js",
+ "content/js/feedbackViews.js",
+ "content/js/conversationAppStore.js",
+ "content/js/roomStore.js",
+ "content/js/roomViews.js",
+ "content/js/conversation.js",
"test/desktop-local/*.js"
]);
@@ -47,7 +47,7 @@ module.exports = function(config) {
// Preprocess matching files before serving them to the browser.
// Available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor .
baseConfig.preprocessors = {
- "content/panels/js/*.js": ["coverage"]
+ "content/js/*.js": ["coverage"]
};
baseConfig.coverageReporter.dir = "test/coverage/desktop";
diff --git a/browser/extensions/loop/test/karma/karma.coverage.shared_standalone.js b/browser/components/loop/test/karma/karma.coverage.shared_standalone.js
similarity index 89%
rename from browser/extensions/loop/test/karma/karma.coverage.shared_standalone.js
rename to browser/components/loop/test/karma/karma.coverage.shared_standalone.js
index 299c44f2185d..7bd346cbf178 100644
--- a/browser/extensions/loop/test/karma/karma.coverage.shared_standalone.js
+++ b/browser/components/loop/test/karma/karma.coverage.shared_standalone.js
@@ -11,11 +11,11 @@ module.exports = function(config) {
// List of files / patterns to load in the browser.
baseConfig.files = baseConfig.files.concat([
"standalone/content/libs/l10n-gaia-02ca67948fe8.js",
- "content/shared/vendor/lodash-3.9.3.js",
- "content/shared/vendor/backbone-1.2.1.js",
- "content/shared/vendor/react-0.13.3.js",
- "content/shared/vendor/classnames-2.2.0.js",
- "content/shared/vendor/sdk.js",
+ "content/shared/libs/lodash-3.9.3.js",
+ "content/shared/libs/backbone-1.2.1.js",
+ "content/shared/libs/react-0.13.3.js",
+ "content/shared/libs/classnames-2.2.0.js",
+ "content/shared/libs/sdk.js",
"test/shared/vendor/*.js",
"test/shared/loop_mocha_utils.js",
"test/karma/head.js", // Add test fixture container
diff --git a/browser/extensions/loop/test/mochitest/.eslintrc b/browser/components/loop/test/mochitest/.eslintrc
similarity index 100%
rename from browser/extensions/loop/test/mochitest/.eslintrc
rename to browser/components/loop/test/mochitest/.eslintrc
diff --git a/browser/extensions/loop/test/mochitest/browser.ini b/browser/components/loop/test/mochitest/browser.ini
similarity index 100%
rename from browser/extensions/loop/test/mochitest/browser.ini
rename to browser/components/loop/test/mochitest/browser.ini
diff --git a/browser/extensions/loop/test/mochitest/browser_LoopRooms_channel.js b/browser/components/loop/test/mochitest/browser_LoopRooms_channel.js
similarity index 98%
rename from browser/extensions/loop/test/mochitest/browser_LoopRooms_channel.js
rename to browser/components/loop/test/mochitest/browser_LoopRooms_channel.js
index 0ef65728b599..ae693218ebc9 100644
--- a/browser/extensions/loop/test/mochitest/browser_LoopRooms_channel.js
+++ b/browser/components/loop/test/mochitest/browser_LoopRooms_channel.js
@@ -12,7 +12,7 @@ var { WebChannel } = Cu.import("resource://gre/modules/WebChannel.jsm", {});
var { Chat } = Cu.import("resource:///modules/Chat.jsm", {});
const TEST_URI =
- "example.com/browser/browser/extensions/loop/test/mochitest/test_loopLinkClicker_channel.html";
+ "example.com/browser/browser/components/loop/test/mochitest/test_loopLinkClicker_channel.html";
const TEST_URI_GOOD = Services.io.newURI("https://" + TEST_URI, null, null);
const TEST_URI_BAD = Services.io.newURI("http://" + TEST_URI, null, null);
diff --git a/browser/extensions/loop/test/mochitest/browser_fxa_login.js b/browser/components/loop/test/mochitest/browser_fxa_login.js
similarity index 99%
rename from browser/extensions/loop/test/mochitest/browser_fxa_login.js
rename to browser/components/loop/test/mochitest/browser_fxa_login.js
index 0d5e359aff27..9036c06ad98d 100644
--- a/browser/extensions/loop/test/mochitest/browser_fxa_login.js
+++ b/browser/components/loop/test/mochitest/browser_fxa_login.js
@@ -8,7 +8,7 @@
"use strict";
const BASE_URL = Services.prefs.getCharPref("loop.server");
-const { LoopAPI } = Cu.import("chrome://loop/content/modules/MozLoopAPI.jsm", {});
+const { LoopAPI } = Cu.import("resource:///modules/loop/MozLoopAPI.jsm", {});
function* checkFxA401() {
let err = MozLoopService.errors.get("login");
diff --git a/browser/extensions/loop/test/mochitest/browser_loop_fxa_server.js b/browser/components/loop/test/mochitest/browser_loop_fxa_server.js
similarity index 97%
rename from browser/extensions/loop/test/mochitest/browser_loop_fxa_server.js
rename to browser/components/loop/test/mochitest/browser_loop_fxa_server.js
index 62c30531b6ad..ae7f6eeaee1e 100644
--- a/browser/extensions/loop/test/mochitest/browser_loop_fxa_server.js
+++ b/browser/components/loop/test/mochitest/browser_loop_fxa_server.js
@@ -7,7 +7,7 @@
"use strict";
-const BASE_URL = "http://mochi.test:8888/browser/browser/extensions/loop/test/mochitest/loop_fxa.sjs?";
+const BASE_URL = "http://mochi.test:8888/browser/browser/components/loop/test/mochitest/loop_fxa.sjs?";
registerCleanupFunction(function* () {
yield promiseDeletedOAuthParams(BASE_URL);
diff --git a/browser/extensions/loop/test/mochitest/browser_mozLoop_appVersionInfo.js b/browser/components/loop/test/mochitest/browser_mozLoop_appVersionInfo.js
similarity index 92%
rename from browser/extensions/loop/test/mochitest/browser_mozLoop_appVersionInfo.js
rename to browser/components/loop/test/mochitest/browser_mozLoop_appVersionInfo.js
index 6c96ebef236b..5528f9036dd5 100644
--- a/browser/extensions/loop/test/mochitest/browser_mozLoop_appVersionInfo.js
+++ b/browser/components/loop/test/mochitest/browser_mozLoop_appVersionInfo.js
@@ -2,7 +2,7 @@
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
-const { LoopAPI } = Cu.import("chrome://loop/content/modules/MozLoopAPI.jsm", {});
+const { LoopAPI } = Cu.import("resource:///modules/loop/MozLoopAPI.jsm", {});
var [, gHandlers] = LoopAPI.inspect();
add_task(function* test_mozLoop_appVersionInfo() {
diff --git a/browser/extensions/loop/test/mochitest/browser_mozLoop_chat.js b/browser/components/loop/test/mochitest/browser_mozLoop_chat.js
similarity index 100%
rename from browser/extensions/loop/test/mochitest/browser_mozLoop_chat.js
rename to browser/components/loop/test/mochitest/browser_mozLoop_chat.js
diff --git a/browser/extensions/loop/test/mochitest/browser_mozLoop_context.js b/browser/components/loop/test/mochitest/browser_mozLoop_context.js
similarity index 96%
rename from browser/extensions/loop/test/mochitest/browser_mozLoop_context.js
rename to browser/components/loop/test/mochitest/browser_mozLoop_context.js
index 424de044dbf8..e5b3bd9563b3 100644
--- a/browser/extensions/loop/test/mochitest/browser_mozLoop_context.js
+++ b/browser/components/loop/test/mochitest/browser_mozLoop_context.js
@@ -7,7 +7,7 @@
*/
"use strict";
-const { LoopAPI } = Cu.import("chrome://loop/content/modules/MozLoopAPI.jsm", {});
+const { LoopAPI } = Cu.import("resource:///modules/loop/MozLoopAPI.jsm", {});
var [, gHandlers] = LoopAPI.inspect();
function promiseGetMetadata() {
diff --git a/browser/extensions/loop/test/mochitest/browser_mozLoop_sharingListeners.js b/browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
similarity index 98%
rename from browser/extensions/loop/test/mochitest/browser_mozLoop_sharingListeners.js
rename to browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
index 78aa1428199b..04dc02256089 100644
--- a/browser/extensions/loop/test/mochitest/browser_mozLoop_sharingListeners.js
+++ b/browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
@@ -6,7 +6,7 @@
*/
"use strict";
-const { LoopAPI } = Cu.import("chrome://loop/content/modules/MozLoopAPI.jsm", {});
+const { LoopAPI } = Cu.import("resource:///modules/loop/MozLoopAPI.jsm", {});
var [, gHandlers] = LoopAPI.inspect();
var handlers = [
diff --git a/browser/extensions/loop/test/mochitest/browser_mozLoop_socialShare.js b/browser/components/loop/test/mochitest/browser_mozLoop_socialShare.js
similarity index 98%
rename from browser/extensions/loop/test/mochitest/browser_mozLoop_socialShare.js
rename to browser/components/loop/test/mochitest/browser_mozLoop_socialShare.js
index 21c416962d20..0347ed9d936c 100644
--- a/browser/extensions/loop/test/mochitest/browser_mozLoop_socialShare.js
+++ b/browser/components/loop/test/mochitest/browser_mozLoop_socialShare.js
@@ -4,7 +4,7 @@
Cu.import("resource://gre/modules/Promise.jsm");
const { SocialService } = Cu.import("resource://gre/modules/SocialService.jsm", {});
-const { LoopAPI } = Cu.import("chrome://loop/content/modules/MozLoopAPI.jsm", {});
+const { LoopAPI } = Cu.import("resource:///modules/loop/MozLoopAPI.jsm", {});
var [, gHandlers] = LoopAPI.inspect();
diff --git a/browser/extensions/loop/test/mochitest/browser_mozLoop_telemetry.js b/browser/components/loop/test/mochitest/browser_mozLoop_telemetry.js
similarity index 98%
rename from browser/extensions/loop/test/mochitest/browser_mozLoop_telemetry.js
rename to browser/components/loop/test/mochitest/browser_mozLoop_telemetry.js
index 7a2b42190613..8746c2ca579a 100644
--- a/browser/extensions/loop/test/mochitest/browser_mozLoop_telemetry.js
+++ b/browser/components/loop/test/mochitest/browser_mozLoop_telemetry.js
@@ -7,7 +7,7 @@
"use strict";
-const { LoopAPI } = Cu.import("chrome://loop/content/modules/MozLoopAPI.jsm", {});
+const { LoopAPI } = Cu.import("resource:///modules/loop/MozLoopAPI.jsm", {});
var [, gHandlers] = LoopAPI.inspect();
var gConstants;
gHandlers.GetAllConstants({}, constants => gConstants = constants);
diff --git a/browser/extensions/loop/test/mochitest/browser_toolbarbutton.js b/browser/components/loop/test/mochitest/browser_toolbarbutton.js
similarity index 99%
rename from browser/extensions/loop/test/mochitest/browser_toolbarbutton.js
rename to browser/components/loop/test/mochitest/browser_toolbarbutton.js
index 707212e5a99c..4023ce9db724 100644
--- a/browser/extensions/loop/test/mochitest/browser_toolbarbutton.js
+++ b/browser/components/loop/test/mochitest/browser_toolbarbutton.js
@@ -8,7 +8,7 @@
"use strict";
Components.utils.import("resource://gre/modules/Promise.jsm", this);
-const { LoopRoomsInternal } = Components.utils.import("chrome://loop/content/modules/LoopRooms.jsm", {});
+const { LoopRoomsInternal } = Components.utils.import("resource:///modules/loop/LoopRooms.jsm", {});
Services.prefs.setBoolPref("loop.gettingStarted.seen", true);
const fxASampleToken = {
diff --git a/browser/extensions/loop/test/mochitest/head.js b/browser/components/loop/test/mochitest/head.js
similarity index 96%
rename from browser/extensions/loop/test/mochitest/head.js
rename to browser/components/loop/test/mochitest/head.js
index ba0315b1b919..5f6baa274fe1 100644
--- a/browser/extensions/loop/test/mochitest/head.js
+++ b/browser/components/loop/test/mochitest/head.js
@@ -8,8 +8,8 @@ const {
LOOP_SESSION_TYPE,
MozLoopServiceInternal,
MozLoopService
-} = Cu.import("chrome://loop/content/modules/MozLoopService.jsm", {});
-const { LoopRooms } = Cu.import("chrome://loop/content/modules/LoopRooms.jsm", {});
+} = Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
+const { LoopRooms } = Cu.import("resource:///modules/loop/LoopRooms.jsm", {});
// Cache this value only once, at the beginning of a
// test run, so that it doesn't pick up the offline=true
@@ -133,7 +133,7 @@ function promiseOAuthParamsSetup(baseURL, params) {
}
function* resetFxA() {
- let global = Cu.import("chrome://loop/content/modules/MozLoopService.jsm", {});
+ let global = Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
global.gHawkClient = null;
global.gFxAOAuthClientPromise = null;
global.gFxAOAuthClient = null;
@@ -152,7 +152,7 @@ function checkFxAOAuthTokenData(aValue) {
}
function checkLoggedOutState() {
- let global = Cu.import("chrome://loop/content/modules/MozLoopService.jsm", {});
+ let global = Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
is(global.gFxAOAuthClientPromise, null, "gFxAOAuthClientPromise should be cleared");
is(MozLoopService.userProfile, null, "fxAOAuthProfile should be cleared");
is(global.gFxAOAuthClient, null, "gFxAOAuthClient should be cleared");
diff --git a/browser/extensions/loop/test/mochitest/loop_fxa.sjs b/browser/components/loop/test/mochitest/loop_fxa.sjs
similarity index 100%
rename from browser/extensions/loop/test/mochitest/loop_fxa.sjs
rename to browser/components/loop/test/mochitest/loop_fxa.sjs
diff --git a/browser/extensions/loop/test/mochitest/test_loopLinkClicker_channel.html b/browser/components/loop/test/mochitest/test_loopLinkClicker_channel.html
similarity index 100%
rename from browser/extensions/loop/test/mochitest/test_loopLinkClicker_channel.html
rename to browser/components/loop/test/mochitest/test_loopLinkClicker_channel.html
diff --git a/browser/extensions/loop/test/package.json b/browser/components/loop/test/package.json
similarity index 100%
rename from browser/extensions/loop/test/package.json
rename to browser/components/loop/test/package.json
diff --git a/browser/extensions/loop/test/shared/activeRoomStore_test.js b/browser/components/loop/test/shared/activeRoomStore_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/activeRoomStore_test.js
rename to browser/components/loop/test/shared/activeRoomStore_test.js
diff --git a/browser/extensions/loop/test/shared/crypto_test.js b/browser/components/loop/test/shared/crypto_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/crypto_test.js
rename to browser/components/loop/test/shared/crypto_test.js
diff --git a/browser/extensions/loop/test/shared/dispatcher_test.js b/browser/components/loop/test/shared/dispatcher_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/dispatcher_test.js
rename to browser/components/loop/test/shared/dispatcher_test.js
diff --git a/browser/extensions/loop/test/shared/frontend_tester.py b/browser/components/loop/test/shared/frontend_tester.py
similarity index 100%
rename from browser/extensions/loop/test/shared/frontend_tester.py
rename to browser/components/loop/test/shared/frontend_tester.py
diff --git a/browser/extensions/loop/test/shared/index.html b/browser/components/loop/test/shared/index.html
similarity index 91%
rename from browser/extensions/loop/test/shared/index.html
rename to browser/components/loop/test/shared/index.html
index 95f94ad1b1f8..6489871738e5 100644
--- a/browser/extensions/loop/test/shared/index.html
+++ b/browser/components/loop/test/shared/index.html
@@ -14,16 +14,16 @@
-
+
-
-
-
+
+
+
diff --git a/browser/extensions/loop/test/shared/linkifiedTextView_test.js b/browser/components/loop/test/shared/linkifiedTextView_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/linkifiedTextView_test.js
rename to browser/components/loop/test/shared/linkifiedTextView_test.js
diff --git a/browser/extensions/loop/test/shared/loop_mocha_utils.js b/browser/components/loop/test/shared/loop_mocha_utils.js
similarity index 100%
rename from browser/extensions/loop/test/shared/loop_mocha_utils.js
rename to browser/components/loop/test/shared/loop_mocha_utils.js
diff --git a/browser/extensions/loop/test/shared/loopapi-client_test.js b/browser/components/loop/test/shared/loopapi-client_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/loopapi-client_test.js
rename to browser/components/loop/test/shared/loopapi-client_test.js
diff --git a/browser/extensions/loop/test/shared/mixins_test.js b/browser/components/loop/test/shared/mixins_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/mixins_test.js
rename to browser/components/loop/test/shared/mixins_test.js
diff --git a/browser/extensions/loop/test/shared/models_test.js b/browser/components/loop/test/shared/models_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/models_test.js
rename to browser/components/loop/test/shared/models_test.js
diff --git a/browser/extensions/loop/test/shared/otSdkDriver_test.js b/browser/components/loop/test/shared/otSdkDriver_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/otSdkDriver_test.js
rename to browser/components/loop/test/shared/otSdkDriver_test.js
diff --git a/browser/extensions/loop/test/shared/sdk_mock.js b/browser/components/loop/test/shared/sdk_mock.js
similarity index 100%
rename from browser/extensions/loop/test/shared/sdk_mock.js
rename to browser/components/loop/test/shared/sdk_mock.js
diff --git a/browser/extensions/loop/test/shared/store_test.js b/browser/components/loop/test/shared/store_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/store_test.js
rename to browser/components/loop/test/shared/store_test.js
diff --git a/browser/extensions/loop/test/shared/test_shared_all.py b/browser/components/loop/test/shared/test_shared_all.py
similarity index 100%
rename from browser/extensions/loop/test/shared/test_shared_all.py
rename to browser/components/loop/test/shared/test_shared_all.py
diff --git a/browser/extensions/loop/test/shared/textChatStore_test.js b/browser/components/loop/test/shared/textChatStore_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/textChatStore_test.js
rename to browser/components/loop/test/shared/textChatStore_test.js
diff --git a/browser/extensions/loop/test/shared/textChatView_test.js b/browser/components/loop/test/shared/textChatView_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/textChatView_test.js
rename to browser/components/loop/test/shared/textChatView_test.js
diff --git a/browser/extensions/loop/test/shared/utils_test.js b/browser/components/loop/test/shared/utils_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/utils_test.js
rename to browser/components/loop/test/shared/utils_test.js
diff --git a/browser/extensions/loop/test/shared/validate_test.js b/browser/components/loop/test/shared/validate_test.js
similarity index 100%
rename from browser/extensions/loop/test/shared/validate_test.js
rename to browser/components/loop/test/shared/validate_test.js
diff --git a/browser/extensions/loop/test/shared/vendor/chai-3.0.0.js b/browser/components/loop/test/shared/vendor/chai-3.0.0.js
similarity index 100%
rename from browser/extensions/loop/test/shared/vendor/chai-3.0.0.js
rename to browser/components/loop/test/shared/vendor/chai-3.0.0.js
diff --git a/browser/extensions/loop/test/shared/vendor/chai-as-promised-5.1.0.js b/browser/components/loop/test/shared/vendor/chai-as-promised-5.1.0.js
similarity index 100%
rename from browser/extensions/loop/test/shared/vendor/chai-as-promised-5.1.0.js
rename to browser/components/loop/test/shared/vendor/chai-as-promised-5.1.0.js
diff --git a/browser/extensions/loop/test/shared/vendor/mocha-2.2.5.css b/browser/components/loop/test/shared/vendor/mocha-2.2.5.css
similarity index 100%
rename from browser/extensions/loop/test/shared/vendor/mocha-2.2.5.css
rename to browser/components/loop/test/shared/vendor/mocha-2.2.5.css
diff --git a/browser/extensions/loop/test/shared/vendor/mocha-2.2.5.js b/browser/components/loop/test/shared/vendor/mocha-2.2.5.js
similarity index 100%
rename from browser/extensions/loop/test/shared/vendor/mocha-2.2.5.js
rename to browser/components/loop/test/shared/vendor/mocha-2.2.5.js
diff --git a/browser/extensions/loop/test/shared/vendor/sinon-1.16.1.js b/browser/components/loop/test/shared/vendor/sinon-1.16.1.js
similarity index 100%
rename from browser/extensions/loop/test/shared/vendor/sinon-1.16.1.js
rename to browser/components/loop/test/shared/vendor/sinon-1.16.1.js
diff --git a/browser/extensions/loop/test/shared/views_test.js b/browser/components/loop/test/shared/views_test.js
similarity index 99%
rename from browser/extensions/loop/test/shared/views_test.js
rename to browser/components/loop/test/shared/views_test.js
index b71ccbcb09b3..3cf0188aeba5 100644
--- a/browser/extensions/loop/test/shared/views_test.js
+++ b/browser/components/loop/test/shared/views_test.js
@@ -840,7 +840,7 @@ describe("loop.shared.views", function() {
});
expect(view.getDOMNode().querySelector(".context-preview").getAttribute("src"))
- .eql("shared/img/icons-16x16.svg#globe");
+ .eql("loop/shared/img/icons-16x16.svg#globe");
});
it("should not display a title if by default", function() {
diff --git a/browser/extensions/loop/test/standalone/index.html b/browser/components/loop/test/standalone/index.html
similarity index 90%
rename from browser/extensions/loop/test/standalone/index.html
rename to browser/components/loop/test/standalone/index.html
index a8ffd06fa7a1..5af0462cf562 100644
--- a/browser/extensions/loop/test/standalone/index.html
+++ b/browser/components/loop/test/standalone/index.html
@@ -14,16 +14,16 @@
-
+
-
-
-
+
+
+
diff --git a/browser/extensions/loop/test/standalone/standaloneAppStore_test.js b/browser/components/loop/test/standalone/standaloneAppStore_test.js
similarity index 100%
rename from browser/extensions/loop/test/standalone/standaloneAppStore_test.js
rename to browser/components/loop/test/standalone/standaloneAppStore_test.js
diff --git a/browser/extensions/loop/test/standalone/standaloneMetricsStore_test.js b/browser/components/loop/test/standalone/standaloneMetricsStore_test.js
similarity index 100%
rename from browser/extensions/loop/test/standalone/standaloneMetricsStore_test.js
rename to browser/components/loop/test/standalone/standaloneMetricsStore_test.js
diff --git a/browser/extensions/loop/test/standalone/standaloneMozLoop_test.js b/browser/components/loop/test/standalone/standaloneMozLoop_test.js
similarity index 100%
rename from browser/extensions/loop/test/standalone/standaloneMozLoop_test.js
rename to browser/components/loop/test/standalone/standaloneMozLoop_test.js
diff --git a/browser/extensions/loop/test/standalone/standaloneRoomViews_test.js b/browser/components/loop/test/standalone/standaloneRoomViews_test.js
similarity index 100%
rename from browser/extensions/loop/test/standalone/standaloneRoomViews_test.js
rename to browser/components/loop/test/standalone/standaloneRoomViews_test.js
diff --git a/browser/extensions/loop/test/standalone/test_standalone_all.py b/browser/components/loop/test/standalone/test_standalone_all.py
similarity index 100%
rename from browser/extensions/loop/test/standalone/test_standalone_all.py
rename to browser/components/loop/test/standalone/test_standalone_all.py
diff --git a/browser/extensions/loop/test/standalone/webapp_test.js b/browser/components/loop/test/standalone/webapp_test.js
similarity index 100%
rename from browser/extensions/loop/test/standalone/webapp_test.js
rename to browser/components/loop/test/standalone/webapp_test.js
diff --git a/browser/extensions/loop/test/ui-showcase/test_ui-showcase.py b/browser/components/loop/test/ui-showcase/test_ui-showcase.py
similarity index 100%
rename from browser/extensions/loop/test/ui-showcase/test_ui-showcase.py
rename to browser/components/loop/test/ui-showcase/test_ui-showcase.py
diff --git a/browser/extensions/loop/test/visual-regression/README.md b/browser/components/loop/test/visual-regression/README.md
similarity index 100%
rename from browser/extensions/loop/test/visual-regression/README.md
rename to browser/components/loop/test/visual-regression/README.md
diff --git a/browser/extensions/loop/test/visual-regression/screenshot b/browser/components/loop/test/visual-regression/screenshot
similarity index 100%
rename from browser/extensions/loop/test/visual-regression/screenshot
rename to browser/components/loop/test/visual-regression/screenshot
diff --git a/browser/extensions/loop/test/xpcshell/.eslintrc b/browser/components/loop/test/xpcshell/.eslintrc
similarity index 91%
rename from browser/extensions/loop/test/xpcshell/.eslintrc
rename to browser/components/loop/test/xpcshell/.eslintrc
index 7732b0d1ce76..e61193d5f6c3 100644
--- a/browser/extensions/loop/test/xpcshell/.eslintrc
+++ b/browser/components/loop/test/xpcshell/.eslintrc
@@ -17,7 +17,6 @@
"do_timeout": false,
"run_next_test": false,
// head.js items.
- "FileUtils": false,
"MockWebSocketChannel": false,
"extend": true,
"getLoopString": false,
@@ -28,8 +27,7 @@
"mockPushHandler": true,
"setupFakeFxAUserProfile": false,
"setupFakeLoopServer": false,
- "timerHandlers": false,
- "updateAppInfo": false,
+ "timerHandlers",
"waitForCondition": true,
// Loop specific items
"MozLoopServiceInternal": true,
diff --git a/browser/extensions/loop/test/xpcshell/head.js b/browser/components/loop/test/xpcshell/head.js
similarity index 79%
rename from browser/extensions/loop/test/xpcshell/head.js
rename to browser/components/loop/test/xpcshell/head.js
index 31378fafdf36..820510ce0d51 100644
--- a/browser/extensions/loop/test/xpcshell/head.js
+++ b/browser/components/loop/test/xpcshell/head.js
@@ -10,54 +10,17 @@ do_get_profile();
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
-
-// Setup the add-ons manager for this test.
-Cu.import("resource://gre/modules/FileUtils.jsm");
-
-function registerDirectory(key, dir) {
- let dirProvider = {
- getFile: function(prop, persistent) {
- persistent.value = false;
- if (prop == key) {
- return dir.clone();
- }
- return null;
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIDirectoryServiceProvider,
- Ci.nsISupports])
- };
- Services.dirsvc.registerProvider(dirProvider);
-}
-
-// As we're not running in application, we need to setup the features directory
-// manually.
-const distroDir = FileUtils.getDir("GreD", ["browser", "features"], true);
-registerDirectory("XREAppFeat", distroDir);
-
-// Set up application info - xpcshell doesn't have this by default.
-Cu.import("resource://testing-common/AppInfo.jsm");
-updateAppInfo();
-
-// Now trigger the addons-startup, and hence startup the manager itself. This
-// should load the manager correctly.
-var gInternalManager = Cc["@mozilla.org/addons/integration;1"]
- .getService(Ci.nsIObserver)
- .QueryInterface(Ci.nsITimerCallback);
-
-gInternalManager.observe(null, "addons-startup", null);
-
Cu.import("resource://gre/modules/Http.jsm");
Cu.import("resource://testing-common/httpd.js");
-Cu.import("chrome://loop/content/modules/MozLoopService.jsm");
+Cu.import("resource:///modules/loop/MozLoopService.jsm");
Cu.import("resource://gre/modules/Promise.jsm");
-Cu.import("chrome://loop/content/modules/LoopRooms.jsm");
+Cu.import("resource:///modules/loop/LoopRooms.jsm");
Cu.import("resource://gre/modules/osfile.jsm");
-const { MozLoopServiceInternal } = Cu.import("chrome://loop/content/modules/MozLoopService.jsm", {});
-const { LoopRoomsInternal, timerHandlers } = Cu.import("chrome://loop/content/modules/LoopRooms.jsm", {});
+const { MozLoopServiceInternal } = Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
+const { LoopRoomsInternal, timerHandlers } = Cu.import("resource:///modules/loop/LoopRooms.jsm", {});
XPCOMUtils.defineLazyModuleGetter(this, "MozLoopPushHandler",
- "chrome://loop/content/modules/MozLoopPushHandler.jsm");
+ "resource:///modules/loop/MozLoopPushHandler.jsm");
const kMockWebSocketChannelName = "Mock WebSocket Channel";
const kWebSocketChannelContractID = "@mozilla.org/network/protocol;1?name=wss";
diff --git a/browser/extensions/loop/test/xpcshell/test_loopapi_doNotDisturb.js b/browser/components/loop/test/xpcshell/test_loopapi_doNotDisturb.js
similarity index 89%
rename from browser/extensions/loop/test/xpcshell/test_loopapi_doNotDisturb.js
rename to browser/components/loop/test/xpcshell/test_loopapi_doNotDisturb.js
index 5a86540b1d3c..bb32bfb1034e 100644
--- a/browser/extensions/loop/test/xpcshell/test_loopapi_doNotDisturb.js
+++ b/browser/components/loop/test/xpcshell/test_loopapi_doNotDisturb.js
@@ -2,7 +2,7 @@
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
-const { LoopAPI } = Cu.import("chrome://loop/content/modules/MozLoopAPI.jsm", {});
+const { LoopAPI } = Cu.import("resource:///modules/loop/MozLoopAPI.jsm", {});
var [, gHandlers] = LoopAPI.inspect();
add_task(function* test_mozLoop_doNotDisturb() {
diff --git a/browser/extensions/loop/test/xpcshell/test_loopapi_internal.js b/browser/components/loop/test/xpcshell/test_loopapi_internal.js
similarity index 96%
rename from browser/extensions/loop/test/xpcshell/test_loopapi_internal.js
rename to browser/components/loop/test/xpcshell/test_loopapi_internal.js
index 17066b85c27d..313b06d82fa6 100644
--- a/browser/extensions/loop/test/xpcshell/test_loopapi_internal.js
+++ b/browser/components/loop/test/xpcshell/test_loopapi_internal.js
@@ -3,7 +3,7 @@
"use strict";
-const { LoopAPI } = Cu.import("chrome://loop/content/modules/MozLoopAPI.jsm", {});
+const { LoopAPI } = Cu.import("resource:///modules/loop/MozLoopAPI.jsm", {});
const [LoopAPIInternal] = LoopAPI.inspect();
add_test(function test_intialize() {
diff --git a/browser/extensions/loop/test/xpcshell/test_loopapi_prefs.js b/browser/components/loop/test/xpcshell/test_loopapi_prefs.js
similarity index 92%
rename from browser/extensions/loop/test/xpcshell/test_loopapi_prefs.js
rename to browser/components/loop/test/xpcshell/test_loopapi_prefs.js
index 1142acfbdb05..2d84a94a3df4 100644
--- a/browser/extensions/loop/test/xpcshell/test_loopapi_prefs.js
+++ b/browser/components/loop/test/xpcshell/test_loopapi_prefs.js
@@ -2,7 +2,7 @@
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
-const { LoopAPI } = Cu.import("chrome://loop/content/modules/MozLoopAPI.jsm", {});
+const { LoopAPI } = Cu.import("resource:///modules/loop/MozLoopAPI.jsm", {});
var [, gHandlers] = LoopAPI.inspect();
add_task(function* test_mozLoop_charPref() {
diff --git a/browser/extensions/loop/test/xpcshell/test_looppush_initialize.js b/browser/components/loop/test/xpcshell/test_looppush_initialize.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_looppush_initialize.js
rename to browser/components/loop/test/xpcshell/test_looppush_initialize.js
diff --git a/browser/extensions/loop/test/xpcshell/test_looprooms.js b/browser/components/loop/test/xpcshell/test_looprooms.js
similarity index 99%
rename from browser/extensions/loop/test/xpcshell/test_looprooms.js
rename to browser/components/loop/test/xpcshell/test_looprooms.js
index 6930b3cf07d2..2ead43579f2f 100644
--- a/browser/extensions/loop/test/xpcshell/test_looprooms.js
+++ b/browser/components/loop/test/xpcshell/test_looprooms.js
@@ -5,7 +5,7 @@
"use strict";
Cu.import("resource://services-common/utils.js");
-Cu.import("chrome://loop/content/modules/LoopRooms.jsm");
+Cu.import("resource:///modules/loop/LoopRooms.jsm");
Cu.import("resource:///modules/Chat.jsm");
Cu.import("resource://gre/modules/Promise.jsm");
diff --git a/browser/extensions/loop/test/xpcshell/test_looprooms_encryption_in_fxa.js b/browser/components/loop/test/xpcshell/test_looprooms_encryption_in_fxa.js
similarity index 98%
rename from browser/extensions/loop/test/xpcshell/test_looprooms_encryption_in_fxa.js
rename to browser/components/loop/test/xpcshell/test_looprooms_encryption_in_fxa.js
index 1d2eb38c0d4c..23ef34e64ee9 100644
--- a/browser/extensions/loop/test/xpcshell/test_looprooms_encryption_in_fxa.js
+++ b/browser/components/loop/test/xpcshell/test_looprooms_encryption_in_fxa.js
@@ -7,7 +7,7 @@
timerHandlers.startTimer = callback => callback();
Cu.import("resource://services-common/utils.js");
-const { LOOP_ROOMS_CACHE_FILENAME } = Cu.import("chrome://loop/content/modules/LoopRoomsCache.jsm", {});
+const { LOOP_ROOMS_CACHE_FILENAME } = Cu.import("resource:///modules/loop/LoopRoomsCache.jsm", {});
const kContextEnabledPref = "loop.contextInConverations.enabled";
diff --git a/browser/extensions/loop/test/xpcshell/test_looprooms_first_notification.js b/browser/components/loop/test/xpcshell/test_looprooms_first_notification.js
similarity index 98%
rename from browser/extensions/loop/test/xpcshell/test_looprooms_first_notification.js
rename to browser/components/loop/test/xpcshell/test_looprooms_first_notification.js
index d32321f26a1b..daaa6cd8f599 100644
--- a/browser/extensions/loop/test/xpcshell/test_looprooms_first_notification.js
+++ b/browser/components/loop/test/xpcshell/test_looprooms_first_notification.js
@@ -4,7 +4,7 @@
"use strict";
Cu.import("resource://services-common/utils.js");
-Cu.import("chrome://loop/content/modules/LoopRooms.jsm");
+Cu.import("resource:///modules/loop/LoopRooms.jsm");
Cu.import("resource:///modules/Chat.jsm");
Cu.import("resource://gre/modules/Promise.jsm");
diff --git a/browser/extensions/loop/test/xpcshell/test_looprooms_getall.js b/browser/components/loop/test/xpcshell/test_looprooms_getall.js
similarity index 98%
rename from browser/extensions/loop/test/xpcshell/test_looprooms_getall.js
rename to browser/components/loop/test/xpcshell/test_looprooms_getall.js
index b4351e16a7eb..534ec287f1a4 100644
--- a/browser/extensions/loop/test/xpcshell/test_looprooms_getall.js
+++ b/browser/components/loop/test/xpcshell/test_looprooms_getall.js
@@ -4,6 +4,7 @@
"use strict";
Cu.import("resource://services-common/utils.js");
+Cu.import("resource:///modules/loop/LoopRooms.jsm");
Cu.import("resource:///modules/Chat.jsm");
Cu.import("resource://gre/modules/Promise.jsm");
diff --git a/browser/extensions/loop/test/xpcshell/test_looprooms_upgrade_to_encryption.js b/browser/components/loop/test/xpcshell/test_looprooms_upgrade_to_encryption.js
similarity index 95%
rename from browser/extensions/loop/test/xpcshell/test_looprooms_upgrade_to_encryption.js
rename to browser/components/loop/test/xpcshell/test_looprooms_upgrade_to_encryption.js
index acd73e23950e..36fdac465fb6 100644
--- a/browser/extensions/loop/test/xpcshell/test_looprooms_upgrade_to_encryption.js
+++ b/browser/components/loop/test/xpcshell/test_looprooms_upgrade_to_encryption.js
@@ -6,8 +6,8 @@
Cu.import("resource://services-common/utils.js");
-const loopCrypto = Cu.import("chrome://loop/content/shared/js/crypto.js", {}).LoopCrypto;
-const { LOOP_ROOMS_CACHE_FILENAME } = Cu.import("chrome://loop/content/modules/LoopRoomsCache.jsm", {});
+const loopCrypto = Cu.import("resource:///modules/loop/crypto.js", {}).LoopCrypto;
+const { LOOP_ROOMS_CACHE_FILENAME } = Cu.import("resource:///modules/loop/LoopRoomsCache.jsm", {});
var gTimerArgs = [];
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_dnd.js b/browser/components/loop/test/xpcshell/test_loopservice_dnd.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_dnd.js
rename to browser/components/loop/test/xpcshell/test_loopservice_dnd.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_encryptionkey.js b/browser/components/loop/test/xpcshell/test_loopservice_encryptionkey.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_encryptionkey.js
rename to browser/components/loop/test/xpcshell/test_loopservice_encryptionkey.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_hawk_errors.js b/browser/components/loop/test/xpcshell/test_loopservice_hawk_errors.js
similarity index 98%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_hawk_errors.js
rename to browser/components/loop/test/xpcshell/test_loopservice_hawk_errors.js
index 96d2f298c219..9cbe314ff0e9 100644
--- a/browser/extensions/loop/test/xpcshell/test_loopservice_hawk_errors.js
+++ b/browser/components/loop/test/xpcshell/test_loopservice_hawk_errors.js
@@ -10,7 +10,7 @@
"use strict";
-const { INVALID_AUTH_TOKEN } = Cu.import("chrome://loop/content/modules/MozLoopService.jsm");
+const { INVALID_AUTH_TOKEN } = Cu.import("resource:///modules/loop/MozLoopService.jsm");
/**
* An HTTP request for /NNN responds with a request with a status of NNN.
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_hawk_request.js b/browser/components/loop/test/xpcshell/test_loopservice_hawk_request.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_hawk_request.js
rename to browser/components/loop/test/xpcshell/test_loopservice_hawk_request.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_initialize.js b/browser/components/loop/test/xpcshell/test_loopservice_initialize.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_initialize.js
rename to browser/components/loop/test/xpcshell/test_loopservice_initialize.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_locales.js b/browser/components/loop/test/xpcshell/test_loopservice_locales.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_locales.js
rename to browser/components/loop/test/xpcshell/test_loopservice_locales.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_loop_prefs.js b/browser/components/loop/test/xpcshell/test_loopservice_loop_prefs.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_loop_prefs.js
rename to browser/components/loop/test/xpcshell/test_loopservice_loop_prefs.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_registration.js b/browser/components/loop/test/xpcshell/test_loopservice_registration.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_registration.js
rename to browser/components/loop/test/xpcshell/test_loopservice_registration.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_registration_retry.js b/browser/components/loop/test/xpcshell/test_loopservice_registration_retry.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_registration_retry.js
rename to browser/components/loop/test/xpcshell/test_loopservice_registration_retry.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_restart.js b/browser/components/loop/test/xpcshell/test_loopservice_restart.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_restart.js
rename to browser/components/loop/test/xpcshell/test_loopservice_restart.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_token_invalid.js b/browser/components/loop/test/xpcshell/test_loopservice_token_invalid.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_token_invalid.js
rename to browser/components/loop/test/xpcshell/test_loopservice_token_invalid.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_token_save.js b/browser/components/loop/test/xpcshell/test_loopservice_token_save.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_token_save.js
rename to browser/components/loop/test/xpcshell/test_loopservice_token_save.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_token_send.js b/browser/components/loop/test/xpcshell/test_loopservice_token_send.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_token_send.js
rename to browser/components/loop/test/xpcshell/test_loopservice_token_send.js
diff --git a/browser/extensions/loop/test/xpcshell/test_loopservice_token_validation.js b/browser/components/loop/test/xpcshell/test_loopservice_token_validation.js
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/test_loopservice_token_validation.js
rename to browser/components/loop/test/xpcshell/test_loopservice_token_validation.js
diff --git a/browser/extensions/loop/test/xpcshell/xpcshell.ini b/browser/components/loop/test/xpcshell/xpcshell.ini
similarity index 100%
rename from browser/extensions/loop/test/xpcshell/xpcshell.ini
rename to browser/components/loop/test/xpcshell/xpcshell.ini
diff --git a/browser/extensions/loop/ui/README.md b/browser/components/loop/ui/README.md
similarity index 82%
rename from browser/extensions/loop/ui/README.md
rename to browser/components/loop/ui/README.md
index f3912bc0090b..a0025bb5cff9 100644
--- a/browser/extensions/loop/ui/README.md
+++ b/browser/components/loop/ui/README.md
@@ -5,6 +5,6 @@ This app file showcases all Loop's view components.
If you want to modify the app, launch the following command:
- browser/extensions/loop/build-jsx --watch
+ browser/components/loop/build-jsx --watch
And start editing the `ui-showcase.jsx` file.
diff --git a/browser/extensions/loop/ui/fake-l10n.js b/browser/components/loop/ui/fake-l10n.js
similarity index 100%
rename from browser/extensions/loop/ui/fake-l10n.js
rename to browser/components/loop/ui/fake-l10n.js
diff --git a/browser/extensions/loop/ui/fake-mozLoop.js b/browser/components/loop/ui/fake-mozLoop.js
similarity index 100%
rename from browser/extensions/loop/ui/fake-mozLoop.js
rename to browser/components/loop/ui/fake-mozLoop.js
diff --git a/browser/extensions/loop/ui/index.html b/browser/components/loop/ui/index.html
similarity index 78%
rename from browser/extensions/loop/ui/index.html
rename to browser/components/loop/ui/index.html
index b0581de67d22..1ea6254e3277 100644
--- a/browser/extensions/loop/ui/index.html
+++ b/browser/components/loop/ui/index.html
@@ -10,7 +10,7 @@
+ href="../content/css/panel.css">
@@ -25,10 +25,10 @@
-
-
-
-
+
+
+
+
@@ -43,16 +43,16 @@
-
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/browser/extensions/loop/ui/react-frame-component.js b/browser/components/loop/ui/react-frame-component.js
similarity index 100%
rename from browser/extensions/loop/ui/react-frame-component.js
rename to browser/components/loop/ui/react-frame-component.js
diff --git a/browser/extensions/loop/ui/sample-img/video-screen-local.png b/browser/components/loop/ui/sample-img/video-screen-local.png
similarity index 100%
rename from browser/extensions/loop/ui/sample-img/video-screen-local.png
rename to browser/components/loop/ui/sample-img/video-screen-local.png
diff --git a/browser/extensions/loop/ui/sample-img/video-screen-remote.png b/browser/components/loop/ui/sample-img/video-screen-remote.png
similarity index 100%
rename from browser/extensions/loop/ui/sample-img/video-screen-remote.png
rename to browser/components/loop/ui/sample-img/video-screen-remote.png
diff --git a/browser/extensions/loop/ui/sample-img/video-screen-terminal.png b/browser/components/loop/ui/sample-img/video-screen-terminal.png
similarity index 100%
rename from browser/extensions/loop/ui/sample-img/video-screen-terminal.png
rename to browser/components/loop/ui/sample-img/video-screen-terminal.png
diff --git a/browser/extensions/loop/ui/ui-showcase.css b/browser/components/loop/ui/ui-showcase.css
similarity index 100%
rename from browser/extensions/loop/ui/ui-showcase.css
rename to browser/components/loop/ui/ui-showcase.css
diff --git a/browser/extensions/loop/ui/ui-showcase.js b/browser/components/loop/ui/ui-showcase.js
similarity index 100%
rename from browser/extensions/loop/ui/ui-showcase.js
rename to browser/components/loop/ui/ui-showcase.js
diff --git a/browser/extensions/loop/ui/ui-showcase.jsx b/browser/components/loop/ui/ui-showcase.jsx
similarity index 100%
rename from browser/extensions/loop/ui/ui-showcase.jsx
rename to browser/components/loop/ui/ui-showcase.jsx
diff --git a/browser/components/moz.build b/browser/components/moz.build
index 74461650a938..8e0d3cbd0c3f 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -11,6 +11,7 @@ DIRS += [
'downloads',
'extensions',
'feeds',
+ 'loop',
'migration',
'newtab',
'places',
diff --git a/browser/components/uitour/test/browser_UITour_loop.js b/browser/components/uitour/test/browser_UITour_loop.js
index 97b4093a4e89..0f6a6ba38c11 100644
--- a/browser/components/uitour/test/browser_UITour_loop.js
+++ b/browser/components/uitour/test/browser_UITour_loop.js
@@ -9,8 +9,8 @@ var gContentWindow;
var loopButton;
var loopPanel = document.getElementById("loop-notification-panel");
-const { LoopRooms } = Components.utils.import("chrome://loop/content/modules/LoopRooms.jsm", {});
-const { MozLoopServiceInternal } = Cu.import("chrome://loop/content/modules/MozLoopService.jsm", {});
+const { LoopRooms } = Components.utils.import("resource:///modules/loop/LoopRooms.jsm", {});
+const { MozLoopServiceInternal } = Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
function test() {
UITourTest();
diff --git a/browser/extensions/loop/bootstrap.js b/browser/extensions/loop/bootstrap.js
deleted file mode 100644
index 85c28beb062a..000000000000
--- a/browser/extensions/loop/bootstrap.js
+++ /dev/null
@@ -1,849 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-const { interfaces: Ci, utils: Cu, classes: Cc } = Components;
-
-const kNSXUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
-const kBrowserSharingNotificationId = "loop-sharing-notification";
-const kPrefBrowserSharingInfoBar = "browserSharing.showInfoBar";
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
- "resource://gre/modules/PrivateBrowsingUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
- "resource:///modules/CustomizableUI.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Task",
- "resource://gre/modules/Task.jsm");
-
-/**
- * This window listener gets loaded into each browser.xul window and is used
- * to provide the required loop functions for the window.
- */
-var WindowListener = {
- /**
- * Sets up the chrome integration within browser windows for Loop.
- *
- * @param {Object} window The window to inject the integration into.
- */
- setupBrowserUI: function(window) {
- let document = window.document;
- let gBrowser = window.gBrowser;
- let xhrClass = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"];
- let FileReader = window.FileReader;
-
- // the "exported" symbols
- var LoopUI = {
- /**
- * @var {XULWidgetSingleWrapper} toolbarButton Getter for the Loop toolbarbutton
- * instance for this window.
- */
- get toolbarButton() {
- delete this.toolbarButton;
- return (this.toolbarButton = CustomizableUI.getWidget("loop-button").forWindow(window));
- },
-
- /**
- * @var {XULElement} panel Getter for the Loop panel element.
- */
- get panel() {
- delete this.panel;
- return (this.panel = document.getElementById("loop-notification-panel"));
- },
-
- /**
- * @var {XULElement|null} browser Getter for the Loop panel browser element.
- * Will be NULL if the panel hasn't loaded yet.
- */
- get browser() {
- let browser = document.querySelector("#loop-notification-panel > #loop-panel-iframe");
- if (browser) {
- delete this.browser;
- this.browser = browser;
- }
- return browser;
- },
-
- /**
- * @var {String|null} selectedTab Getter for the name of the currently selected
- * tab inside the Loop panel. Will be NULL if
- * the panel hasn't loaded yet.
- */
- get selectedTab() {
- if (!this.browser) {
- return null;
- }
-
- let selectedTab = this.browser.contentDocument.querySelector(".tab-view > .selected");
- return selectedTab && selectedTab.getAttribute("data-tab-name");
- },
-
- /**
- * @return {Promise}
- */
- promiseDocumentVisible(aDocument) {
- if (!aDocument.hidden) {
- return Promise.resolve(aDocument);
- }
-
- return new Promise((resolve) => {
- aDocument.addEventListener("visibilitychange", function onVisibilityChanged() {
- aDocument.removeEventListener("visibilitychange", onVisibilityChanged);
- resolve(aDocument);
- });
- });
- },
-
- /**
- * Toggle between opening or hiding the Loop panel.
- *
- * @param {DOMEvent} [event] Optional event that triggered the call to this
- * function.
- * @param {String} [tabId] Optional name of the tab to select after the panel
- * has opened. Does nothing when the panel is hidden.
- * @return {Promise}
- */
- togglePanel: function(event, tabId = null) {
- if (!this.panel) {
- // We're on the hidden window! What fun!
- let obs = win => {
- Services.obs.removeObserver(obs, "browser-delayed-startup-finished");
- win.LoopUI.togglePanel(event, tabId);
- };
- Services.obs.addObserver(obs, "browser-delayed-startup-finished", false);
- return window.OpenBrowserWindow();
- }
- if (this.panel.state == "open") {
- return new Promise(resolve => {
- this.panel.hidePopup();
- resolve();
- });
- }
-
- return this.openCallPanel(event, tabId).then(doc => {
- let fm = Services.focus;
- fm.moveFocus(doc.defaultView, null, fm.MOVEFOCUS_FIRST, fm.FLAG_NOSCROLL);
- }).catch(err => {
- Cu.reportError(err);
- });
- },
-
- /**
- * Opens the panel for Loop and sizes it appropriately.
- *
- * @param {event} event The event opening the panel, used to anchor
- * the panel to the button which triggers it.
- * @param {String} [tabId] Identifier of the tab to select when the panel is
- * opened. Example: 'rooms', 'contacts', etc.
- * @return {Promise}
- */
- openCallPanel: function(event, tabId = null) {
- return new Promise((resolve) => {
- let callback = iframe => {
- // Helper function to show a specific tab view in the panel.
- function showTab() {
- if (!tabId) {
- resolve(LoopUI.promiseDocumentVisible(iframe.contentDocument));
- return;
- }
-
- let win = iframe.contentWindow;
- let ev = new win.CustomEvent("UIAction", Cu.cloneInto({
- detail: {
- action: "selectTab",
- tab: tabId
- }
- }, win));
- win.dispatchEvent(ev);
- resolve(LoopUI.promiseDocumentVisible(iframe.contentDocument));
- }
-
- // If the panel has been opened and initialized before, we can skip waiting
- // for the content to load - because it's already there.
- if (("contentWindow" in iframe) && iframe.contentWindow.document.readyState == "complete") {
- showTab();
- return;
- }
-
- let documentDOMLoaded = () => {
- iframe.removeEventListener("DOMContentLoaded", documentDOMLoaded, true);
- // Handle window.close correctly on the panel.
- this.hookWindowCloseForPanelClose(iframe.contentWindow);
- iframe.contentWindow.addEventListener("loopPanelInitialized", function loopPanelInitialized() {
- iframe.contentWindow.removeEventListener("loopPanelInitialized",
- loopPanelInitialized);
- showTab();
- });
- };
- iframe.addEventListener("DOMContentLoaded", documentDOMLoaded, true);
- };
-
- // Used to clear the temporary "login" state from the button.
- Services.obs.notifyObservers(null, "loop-status-changed", null);
-
- this.shouldResumeTour().then((resume) => {
- if (resume) {
- // Assume the conversation with the visitor wasn't open since we would
- // have resumed the tour as soon as the visitor joined if it was (and
- // the pref would have been set to false already.
- this.MozLoopService.resumeTour("waiting");
- resolve();
- return;
- }
-
- this.LoopAPI.initialize();
-
- let anchor = event ? event.target : this.toolbarButton.anchor;
- let setHeight = 410;
- if (gBrowser.selectedBrowser.getAttribute("remote") === "true") {
- setHeight = 262;
- }
- this.PanelFrame.showPopup(window, anchor,
- "loop", null, "about:looppanel",
- // Loop wants a fixed size for the panel. This also stops it dynamically resizing.
- { width: 330, height: setHeight },
- callback);
- });
- });
- },
-
- /**
- * Method to know whether actions to open the panel should instead resume the tour.
- *
- * We need the panel to be opened via UITour so that it gets @noautohide.
- *
- * @return {Promise} resolving with a {Boolean} of whether the tour should be resumed instead of
- * opening the panel.
- */
- shouldResumeTour: Task.async(function* () {
- // Resume the FTU tour if this is the first time a room was joined by
- // someone else since the tour.
- if (!Services.prefs.getBoolPref("loop.gettingStarted.resumeOnFirstJoin")) {
- return false;
- }
-
- if (!this.LoopRooms.participantsCount) {
- // Nobody is in the rooms
- return false;
- }
-
- let roomsWithNonOwners = yield this.roomsWithNonOwners();
- if (!roomsWithNonOwners.length) {
- // We were the only one in a room but we want to know about someone else joining.
- return false;
- }
-
- return true;
- }),
-
- /**
- * @return {Promise} resolved with an array of Rooms with participants (excluding owners)
- */
- roomsWithNonOwners: function() {
- return new Promise(resolve => {
- this.LoopRooms.getAll((error, rooms) => {
- let roomsWithNonOwners = [];
- for (let room of rooms) {
- if (!("participants" in room)) {
- continue;
- }
- let numNonOwners = room.participants.filter(participant => !participant.owner).length;
- if (!numNonOwners) {
- continue;
- }
- roomsWithNonOwners.push(room);
- }
- resolve(roomsWithNonOwners);
- });
- });
- },
-
- /**
- * Triggers the initialization of the loop service. Called by
- * delayedStartup.
- */
- init: function() {
- // Cleanup when the window unloads.
- window.addEventListener("unload", () => {
- this.uninit();
- });
-
- // Add observer notifications before the service is initialized
- Services.obs.addObserver(this, "loop-status-changed", false);
-
- // This is a promise for test purposes, but we don't want to be logging
- // expected errors to the console, so we catch them here.
- this.MozLoopService.initialize().catch(ex => {
- if (!ex.message ||
- (!ex.message.contains("not enabled") &&
- !ex.message.contains("not needed"))) {
- console.error(ex);
- }
- });
- this.updateToolbarState();
- },
-
- uninit: function() {
- Services.obs.removeObserver(this, "loop-status-changed");
- },
-
- // Implements nsIObserver
- observe: function(subject, topic, data) {
- if (topic != "loop-status-changed") {
- return;
- }
- this.updateToolbarState(data);
- },
-
- /**
- * Updates the toolbar/menu-button state to reflect Loop status.
- *
- * @param {string} [aReason] Some states are only shown if
- * a related reason is provided.
- *
- * aReason="login": Used after a login is completed
- * successfully. This is used so the state can be
- * temporarily shown until the next state change.
- */
- updateToolbarState: function(aReason = null) {
- if (!this.toolbarButton.node) {
- return;
- }
- let state = "";
- let mozL10nId = "loop-call-button3";
- let suffix = ".tooltiptext";
- if (this.MozLoopService.errors.size) {
- state = "error";
- mozL10nId += "-error";
- } else if (this.MozLoopService.screenShareActive) {
- state = "action";
- mozL10nId += "-screensharing";
- } else if (aReason == "login" && this.MozLoopService.userProfile) {
- state = "active";
- mozL10nId += "-active";
- suffix += "2";
- } else if (this.MozLoopService.doNotDisturb) {
- state = "disabled";
- mozL10nId += "-donotdisturb";
- } else if (this.MozLoopService.roomsParticipantsCount > 0) {
- state = "active";
- this.roomsWithNonOwners().then(roomsWithNonOwners => {
- if (roomsWithNonOwners.length > 0) {
- mozL10nId += "-participantswaiting";
- } else {
- mozL10nId += "-active";
- }
-
- suffix += "2";
- this.updateTooltiptext(mozL10nId + suffix);
- this.toolbarButton.node.setAttribute("state", state);
- });
- return;
- } else {
- suffix += "2";
- }
-
- this.toolbarButton.node.setAttribute("state", state);
- this.updateTooltiptext(mozL10nId + suffix);
- },
-
- /**
- * Updates the tootltiptext to reflect Loop status.
- *
- * @param {string} [mozL10nId] l10n ID that refelct the current
- * Loop status.
- */
- updateTooltiptext: function(mozL10nId) {
- this.toolbarButton.node.setAttribute("tooltiptext", mozL10nId);
- var tooltiptext = CustomizableUI.getLocalizedProperty(this.toolbarButton, "tooltiptext");
- this.toolbarButton.node.setAttribute("tooltiptext", tooltiptext);
- },
-
- /**
- * Show a desktop notification when 'do not disturb' isn't enabled.
- *
- * @param {Object} options Set of options that may tweak the appearance and
- * behavior of the notification.
- * Option params:
- * - {String} title Notification title message
- * - {String} [message] Notification body text
- * - {String} [icon] Notification icon
- * - {String} [sound] Sound to play
- * - {String} [selectTab] Tab to select when the panel
- * opens
- * - {Function} [onclick] Callback to invoke when
- * the notification is clicked.
- * Opens the panel by default.
- */
- showNotification: function(options) {
- if (this.MozLoopService.doNotDisturb) {
- return;
- }
-
- if (!options.title) {
- throw new Error("Missing title, can not display notification");
- }
-
- let notificationOptions = {
- body: options.message || ""
- };
- if (options.icon) {
- notificationOptions.icon = options.icon;
- }
- if (options.sound) {
- // This will not do anything, until bug bug 1105222 is resolved.
- notificationOptions.mozbehavior = {
- soundFile: ""
- };
- this.playSound(options.sound);
- }
-
- let notification = new window.Notification(options.title, notificationOptions);
- notification.addEventListener("click", e => {
- if (window.closed) {
- return;
- }
-
- try {
- window.focus();
- } catch (ex) {
- // Do nothing.
- }
-
- // We need a setTimeout here, otherwise the panel won't show after the
- // window received focus.
- window.setTimeout(() => {
- if (typeof options.onclick == "function") {
- options.onclick();
- } else {
- // Open the Loop panel as a default action.
- this.openCallPanel(null, options.selectTab || null);
- }
- }, 0);
- });
- },
-
- /**
- * Play a sound in this window IF there's no sound playing yet.
- *
- * @param {String} name Name of the sound, like 'ringtone' or 'room-joined'
- */
- playSound: function(name) {
- if (this.ActiveSound || this.MozLoopService.doNotDisturb) {
- return;
- }
-
- this.activeSound = new window.Audio();
- this.activeSound.src = `chrome://loop/content/shared/sounds/${name}.ogg`;
- this.activeSound.load();
- this.activeSound.play();
-
- this.activeSound.addEventListener("ended", () => this.activeSound = undefined, false);
- },
-
- /**
- * Start listening to selected tab changes and notify any content page that's
- * listening to 'BrowserSwitch' push messages.
- *
- * Push message parameters:
- * - {Integer} windowId The new windowId for the browser.
- */
- startBrowserSharing: function() {
- if (!this._listeningToTabSelect) {
- gBrowser.tabContainer.addEventListener("TabSelect", this);
- this._listeningToTabSelect = true;
- }
-
- this._maybeShowBrowserSharingInfoBar();
-
- // Get the first window Id for the listener.
- this.LoopAPI.broadcastPushMessage("BrowserSwitch",
- gBrowser.selectedBrowser.outerWindowID);
- },
-
- /**
- * Stop listening to selected tab changes.
- */
- stopBrowserSharing: function() {
- if (!this._listeningToTabSelect) {
- return;
- }
-
- this._hideBrowserSharingInfoBar();
- gBrowser.tabContainer.removeEventListener("TabSelect", this);
- this._listeningToTabSelect = false;
- },
-
- /**
- * Helper function to fetch a localized string via the MozLoopService API.
- * It's currently inconveniently wrapped inside a string of stringified JSON.
- *
- * @param {String} key The element id to get strings for.
- * @return {String}
- */
- _getString: function(key) {
- let str = this.MozLoopService.getStrings(key);
- if (str) {
- str = JSON.parse(str).textContent;
- }
- return str;
- },
-
- /**
- * Shows an infobar notification at the top of the browser window that warns
- * the user that their browser tabs are being broadcasted through the current
- * conversation.
- */
- _maybeShowBrowserSharingInfoBar: function() {
- this._hideBrowserSharingInfoBar();
-
- // Don't show the infobar if it's been permanently disabled from the menu.
- if (!this.MozLoopService.getLoopPref(kPrefBrowserSharingInfoBar)) {
- return;
- }
-
- let box = gBrowser.getNotificationBox();
- let paused = false;
- let bar = box.appendNotification(
- this._getString("infobar_screenshare_browser_message"),
- kBrowserSharingNotificationId,
- // Icon is defined in browser theme CSS.
- null,
- box.PRIORITY_WARNING_LOW,
- [{
- label: this._getString("infobar_button_pause_label"),
- accessKey: this._getString("infobar_button_pause_accesskey"),
- isDefault: false,
- callback: (event, buttonInfo, buttonNode) => {
- paused = !paused;
- bar.label = paused ? this._getString("infobar_screenshare_paused_browser_message") :
- this._getString("infobar_screenshare_browser_message");
- bar.classList.toggle("paused", paused);
- buttonNode.label = paused ? this._getString("infobar_button_resume_label") :
- this._getString("infobar_button_pause_label");
- buttonNode.accessKey = paused ? this._getString("infobar_button_resume_accesskey") :
- this._getString("infobar_button_pause_accesskey");
- return true;
- }
- },
- {
- label: this._getString("infobar_button_stop_label"),
- accessKey: this._getString("infobar_button_stop_accesskey"),
- isDefault: true,
- callback: () => {
- this._hideBrowserSharingInfoBar();
- LoopUI.MozLoopService.hangupAllChatWindows();
- }
- }]
- );
-
- // Keep showing the notification bar until the user explicitly closes it.
- bar.persistence = -1;
- },
-
- /**
- * Hides the infobar, permanantly if requested.
- *
- * @param {Boolean} permanently Flag that determines if the infobar will never
- * been shown again. Defaults to `false`.
- * @return {Boolean} |true| if the infobar was hidden here.
- */
- _hideBrowserSharingInfoBar: function(permanently = false, browser) {
- browser = browser || gBrowser.selectedBrowser;
- let box = gBrowser.getNotificationBox(browser);
- let notification = box.getNotificationWithValue(kBrowserSharingNotificationId);
- let removed = false;
- if (notification) {
- box.removeNotification(notification);
- removed = true;
- }
-
- if (permanently) {
- this.MozLoopService.setLoopPref(kPrefBrowserSharingInfoBar, false);
- }
-
- return removed;
- },
-
- /**
- * Handles events from gBrowser.
- */
- handleEvent: function(event) {
- // We only should get "select" events.
- if (event.type != "TabSelect") {
- return;
- }
-
- let wasVisible = false;
- // Hide the infobar from the previous tab.
- if (event.detail.previousTab) {
- wasVisible = this._hideBrowserSharingInfoBar(false,
- event.detail.previousTab.linkedBrowser);
- }
-
- // We've changed the tab, so get the new window id.
- this.LoopAPI.broadcastPushMessage("BrowserSwitch",
- gBrowser.selectedBrowser.outerWindowID);
-
- if (wasVisible) {
- // If the infobar was visible before, we should show it again after the
- // switch.
- this._maybeShowBrowserSharingInfoBar();
- }
- },
-
- /**
- * Fetch the favicon of the currently selected tab in the format of a data-uri.
- *
- * @param {Function} callback Function to be invoked with an error object as
- * its first argument when an error occurred or
- * a string as second argument when the favicon
- * has been fetched.
- */
- getFavicon: function(callback) {
- let pageURI = gBrowser.selectedTab.linkedBrowser.currentURI.spec;
- // If the tab page’s url starts with http(s), fetch icon.
- if (!/^https?:/.test(pageURI)) {
- callback();
- return;
- }
-
- this.PlacesUtils.promiseFaviconLinkUrl(pageURI).then(uri => {
- // We XHR the favicon to get a File object, which we can pass to the FileReader
- // object. The FileReader turns the File object into a data-uri.
- let xhr = xhrClass.createInstance(Ci.nsIXMLHttpRequest);
- xhr.open("get", uri.spec, true);
- xhr.responseType = "blob";
- xhr.overrideMimeType("image/x-icon");
- xhr.onload = () => {
- if (xhr.status != 200) {
- callback(new Error("Invalid status code received for favicon XHR: " + xhr.status));
- return;
- }
-
- let reader = new FileReader();
- reader.onload = reader.onload = () => callback(null, reader.result);
- reader.onerror = callback;
- reader.readAsDataURL(xhr.response);
- };
- xhr.onerror = callback;
- xhr.send();
- }).catch(err => {
- callback(err || new Error("No favicon found"));
- });
- }
- };
-
- XPCOMUtils.defineLazyModuleGetter(LoopUI, "hookWindowCloseForPanelClose", "resource://gre/modules/MozSocialAPI.jsm");
- XPCOMUtils.defineLazyModuleGetter(LoopUI, "LoopAPI", "chrome://loop/content/modules/MozLoopAPI.jsm");
- XPCOMUtils.defineLazyModuleGetter(LoopUI, "LoopRooms", "chrome://loop/content/modules/LoopRooms.jsm");
- XPCOMUtils.defineLazyModuleGetter(LoopUI, "MozLoopService", "chrome://loop/content/modules/MozLoopService.jsm");
- XPCOMUtils.defineLazyModuleGetter(LoopUI, "PanelFrame", "resource:///modules/PanelFrame.jsm");
- XPCOMUtils.defineLazyModuleGetter(LoopUI, "PlacesUtils", "resource://gre/modules/PlacesUtils.jsm");
-
- LoopUI.init();
- window.LoopUI = LoopUI;
- },
-
- tearDownBrowserUI: function(window) {
- let document = window.document;
-
- // Take any steps to remove UI or anything from the browser window
- // document.getElementById() etc. will work here
- // XXX Add in tear-down of the panel.
- },
-
- // nsIWindowMediatorListener functions.
- onOpenWindow: function(xulWindow) {
- // A new window has opened.
- let domWindow = xulWindow.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindow);
-
- // Wait for it to finish loading.
- domWindow.addEventListener("load", function listener() {
- domWindow.removeEventListener("load", listener, false);
-
- // If this is a browser window then setup its UI.
- if (domWindow.document.documentElement.getAttribute("windowtype") == "navigator:browser") {
- WindowListener.setupBrowserUI(domWindow);
- }
- }, false);
- },
-
- onCloseWindow: function(xulWindow) {
- },
-
- onWindowTitleChange: function(xulWindow, newTitle) {
- }
-};
-
-/**
- * Creates the loop button on the toolbar. Due to loop being a system-addon
- * CustomizableUI already has a placement location for the button, so that
- * we can be on the toolbar.
- */
-function createLoopButton() {
- CustomizableUI.createWidget({
- id: "loop-button",
- type: "custom",
- label: "loop-call-button3.label",
- tooltiptext: "loop-call-button3.tooltiptext2",
- privateBrowsingTooltiptext: "loop-call-button3-pb.tooltiptext",
- defaultArea: CustomizableUI.AREA_NAVBAR,
- removable: true,
- onBuild: function(aDocument) {
- // If we're not supposed to see the button, return zip.
- if (!Services.prefs.getBoolPref("loop.enabled")) {
- return null;
- }
-
- let isWindowPrivate = PrivateBrowsingUtils.isWindowPrivate(aDocument.defaultView);
-
- let node = aDocument.createElementNS(kNSXUL, "toolbarbutton");
- node.setAttribute("id", this.id);
- node.classList.add("toolbarbutton-1");
- node.classList.add("chromeclass-toolbar-additional");
- node.classList.add("badged-button");
- node.setAttribute("label", CustomizableUI.getLocalizedProperty(this, "label"));
- if (isWindowPrivate) {
- node.setAttribute("disabled", "true");
- }
- let tooltiptext = isWindowPrivate ?
- CustomizableUI.getLocalizedProperty(this, "privateBrowsingTooltiptext",
- [CustomizableUI.getLocalizedProperty(this, "label")]) :
- CustomizableUI.getLocalizedProperty(this, "tooltiptext");
- node.setAttribute("tooltiptext", tooltiptext);
- node.setAttribute("removable", "true");
- node.addEventListener("command", function(event) {
- aDocument.defaultView.LoopUI.togglePanel(event);
- });
-
- return node;
- }
- });
-}
-
-/**
- * Loads the default preferences from the prefs file. This loads the preferences
- * into the default branch, so they don't appear as user preferences.
- */
-function loadDefaultPrefs() {
- var branch = Services.prefs.getDefaultBranch("");
- Services.scriptloader.loadSubScript("chrome://loop/content/preferences/prefs.js", {
- pref: (key, val) => {
- switch (typeof val) {
- case "boolean":
- branch.setBoolPref(key, val);
- break;
- case "number":
- branch.setIntPref(key, val);
- break;
- case "string":
- branch.setCharPref(key, val);
- break;
- }
- }
- });
-}
-
-/**
- * Called when the add-on is started, e.g. when installed or when Firefox starts.
- */
-function startup() {
- loadDefaultPrefs();
-
- createLoopButton();
-
- // Attach to hidden window (for OS X).
- try {
- WindowListener.setupBrowserUI(Services.appShell.hiddenDOMWindow);
- } catch (ex) {
- // Hidden window didn't exist, so wait until startup is done.
- let topic = "browser-delayed-startup-finished";
- Services.obs.addObserver(function observer() {
- Services.obs.removeObserver(observer, topic);
- WindowListener.setupBrowserUI(Services.appShell.hiddenDOMWindow);
- }, topic, false);
- }
-
- // Attach to existing browser windows, for modifying UI.
- let wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
- let windows = wm.getEnumerator("navigator:browser");
- while (windows.hasMoreElements()) {
- let domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow);
- WindowListener.setupBrowserUI(domWindow);
- }
-
- // Wait for any new browser windows to open.
- wm.addListener(WindowListener);
-
- // Load our stylesheets.
- let styleSheetService = Cc["@mozilla.org/content/style-sheet-service;1"]
- .getService(Components.interfaces.nsIStyleSheetService);
- let sheets = ["chrome://loop-shared/skin/loop.css",
- "chrome://loop/skin/platform.css"];
- for (let sheet of sheets) {
- let styleSheetURI = Services.io.newURI(sheet, null, null);
- // XXX We would love to specify AUTHOR_SHEET here and in shutdown, however
- // bug 1228542 prevents us from doing that as we'd cause a lot of assertions
- // in debug mode for tests. Once that is fixed, we should be able to change
- // this, and remove the !important attributes from our syle sheets.
- styleSheetService.loadAndRegisterSheet(styleSheetURI,
- styleSheetService.USER_SHEET);
- }
-}
-
-/**
- * Called when the add-on is shutting down, could be for re-installation
- * or just uninstall.
- */
-function shutdown() {
- // Close any open chat windows
- Cu.import("resource:///modules/Chat.jsm");
- let isLoopURL = ({ src }) => /^about:loopconversation#/.test(src);
- [...Chat.chatboxes].filter(isLoopURL).forEach(chatbox => {
- chatbox.content.contentWindow.close();
- });
-
- // Detach from hidden window (for OS X).
- WindowListener.tearDownBrowserUI(Services.appShell.hiddenDOMWindow);
-
- // Detach from browser windows.
- let wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
- let windows = wm.getEnumerator("navigator:browser");
- while (windows.hasMoreElements()) {
- let domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow);
- WindowListener.tearDownBrowserUI(domWindow);
- }
-
- // Stop waiting for browser windows to open.
- wm.removeListener(WindowListener);
-
- CustomizableUI.destroyWidget("loop-button");
-
- // Unload stylesheets.
- let styleSheetService = Cc["@mozilla.org/content/style-sheet-service;1"]
- .getService(Components.interfaces.nsIStyleSheetService);
- let sheets = ["chrome://loop/content/addon/css/loop.css",
- "chrome://loop/skin/platform.css"];
- for (let sheet of sheets) {
- let styleSheetURI = Services.io.newURI(sheet, null, null);
- if (styleSheetService.sheetRegistered(styleSheetURI,
- styleSheetService.USER_SHEET)) {
- styleSheetService.unregisterSheet(styleSheetURI,
- styleSheetService.USER_SHEET);
- }
- }
-
- // Unload modules.
- Cu.unload("chrome://loop/content/modules/MozLoopAPI.jsm");
- Cu.unload("chrome://loop/content/modules/LoopRooms.jsm");
- Cu.unload("chrome://loop/content/modules/MozLoopService.jsm");
-}
-
-function install() {}
-
-function uninstall() {}
diff --git a/browser/extensions/loop/content/modules/.eslintrc b/browser/extensions/loop/content/modules/.eslintrc
deleted file mode 100644
index 5c7868e56d0f..000000000000
--- a/browser/extensions/loop/content/modules/.eslintrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "../../.eslintrc-gecko"
-}
diff --git a/browser/extensions/loop/content/panels/conversation.html b/browser/extensions/loop/content/panels/conversation.html
deleted file mode 100644
index 7cbb81835f2c..000000000000
--- a/browser/extensions/loop/content/panels/conversation.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-