1+ // Hooks added here have a bridge allowing communication between the BEX Background Script and the BEX Content Script.
2+ // Note: Events sent from this background script using `bridge.send` can be `listen`'d for by all client BEX bridges for this BEX
3+
4+ // More info: https://quasar.dev/quasar-cli/developing-browser-extensions/background-hooks
5+
6+ export default function attachBackgroundHooks ( bridge /* , allActiveConnections */ ) {
7+
8+ bridge . on ( 'storage.get' , event => {
9+ const payload = event . data
10+ if ( payload . key === null ) {
11+ chrome . storage . local . get ( null , r => {
12+ const result = [ ]
13+
14+ // Group the items up into an array to take advantage of the bridge's chunk splitting.
15+ for ( const itemKey in r ) {
16+ result . push ( r [ itemKey ] )
17+ }
18+ bridge . send ( event . eventResponseKey , result )
19+ } )
20+ } else {
21+ chrome . storage . local . get ( [ payload . key ] , r => {
22+ bridge . send ( event . eventResponseKey , r [ payload . key ] )
23+ } )
24+ }
25+ } )
26+
27+ bridge . on ( 'storage.set' , event => {
28+ const payload = event . data
29+ chrome . storage . local . set ( {
30+ [ payload . key ] : payload . data
31+ } , ( ) => {
32+ bridge . send ( event . eventResponseKey , payload . data )
33+ } )
34+ } )
35+
36+ bridge . on ( 'storage.remove' , event => {
37+ const payload = event . data
38+ chrome . storage . local . remove ( payload . key , ( ) => {
39+ bridge . send ( event . eventResponseKey , payload . data )
40+ } )
41+ } )
42+
43+ /*
44+ // EXAMPLES
45+ // Listen to a message from the client
46+ bridge.on('test', d => {
47+ console.log(d)
48+ })
49+
50+ // Send a message to the client based on something happening.
51+ chrome.tabs.onCreated.addListener(tab => {
52+ bridge.send('browserTabCreated', { tab })
53+ })
54+
55+ // Send a message to the client based on something happening.
56+ chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
57+ if (changeInfo.url) {
58+ bridge.send('browserTabUpdated', { tab, changeInfo })
59+ }
60+ })
61+ */
62+
63+ chrome . tabs . query ( {
64+ active : true
65+ } , function ( tabs ) {
66+ try {
67+ var activeTab = tabs [ 0 ] ;
68+ init ( activeTab . url )
69+ } catch ( err ) {
70+ console . warn ( err )
71+ }
72+ } ) ;
73+
74+ function init ( current_active_url ) {
75+
76+ const QuasarStorageToString = ( val ) => {
77+ return val . substring ( 9 )
78+ }
79+
80+ const StringToJSON = val => {
81+ return JSON . parse ( val )
82+ }
83+
84+ const getStorageValue = key => {
85+ return StringToJSON ( QuasarStorageToString ( localStorage . getItem ( key ) ) )
86+ }
87+
88+ const isExcluded = ( current_url , excluded_urls ) => {
89+ let new_excluded_urls = excluded_urls . split ( ',' )
90+ let isExcludedBool = false
91+ for ( var i = new_excluded_urls . length - 1 ; i >= 0 ; i -- ) {
92+ if ( new_excluded_urls [ i ] == current_url ) {
93+ isExcludedBool = true
94+ break ;
95+ }
96+ }
97+
98+ return isExcludedBool
99+ }
100+
101+ const getOriginFromURL = url => {
102+ let resp = ''
103+ try {
104+ if ( ! [ '' , 'all' ] . includes ( url ) ) {
105+ const myUrl = new URL ( url )
106+ resp = myUrl [ 'origin' ]
107+ }
108+ } catch ( err ) {
109+ console . warn ( err )
110+ }
111+ return resp
112+ }
113+
114+ const checkURLScriptToAdd = ( url ) => {
115+ let curr_origin = getOriginFromURL ( url )
116+
117+ let found = false
118+ let data = false
119+ for ( var i = 0 ; i < localStorage . length ; i ++ ) {
120+ data = getStorageValue ( localStorage . key ( i ) )
121+ // data.included_url
122+ let new_origin = getOriginFromURL ( data . included_url )
123+
124+ if ( data . included_url != 'all' && ( data . included_url == url || new_origin == curr_origin ) ) {
125+ found = true
126+ break ;
127+ }
128+ }
129+
130+ if ( ! found ) {
131+ data = false
132+ if ( localStorage . getItem ( 'all' ) != null ) {
133+ data = getStorageValue ( 'all' )
134+ }
135+ }
136+
137+ if ( data && ! isExcluded ( url , data . excluded_url ) ) {
138+ bridge . send ( 'browserURLChanged' , {
139+ ...data ,
140+ ...{
141+ current_active_url : current_active_url
142+ }
143+ } ) ;
144+ }
145+ // switch()
146+ }
147+
148+ checkURLScriptToAdd ( current_active_url )
149+ }
150+ }
0 commit comments