प्रोफ़ाइल स्विचिंग के लिए एक Chrome MV3 प्रॉक्सी प्रमाणीकरण श्रोता पंजीकृत करें
Manifest V3 प्रमाणीकरण श्रोता को समकालिक रूप से पंजीकृत करें और इवेंट कॉलबैक के अंदर वर्तमान प्रॉक्सी खाता पढ़ें।
प्रॉक्सी प्रोफ़ाइल बदलने पर चयनित खाता बदलना चाहिए, न कि दूसरा onAuthRequired श्रोता जोड़ना। अन्यथा पुराने closures पिछले चयन के खाते से उत्तर देते रह सकते हैं।
सर्विस वर्कर के शीर्ष स्तर पर एक नामित श्रोता पंजीकृत करें। इवेंट आने पर वर्तमान खाता पढ़ें:
function answerProxyChallenge(details, reply) {
if (!details.isProxy) {
reply({});
return;
}
chrome.storage.session.get('selectedProxy').then(({selectedProxy: p}) => {
if (!p || details.challenger.host !== p.host ||
details.challenger.port !== p.port) {
reply({});
return;
}
reply({authCredentials: {username: p.username, password: p.password}});
}).catch(() => reply({cancel: true}));
}
chrome.webRequest.onAuthRequired.addListener(
answerProxyChallenge,
{urls: ['<all_urls>']},
['asyncBlocking'],
);यह अंश मानता है कि एक्सटेंशन पहले से चयनित HTTP प्रॉक्सी को selectedProxy के अंतर्गत संग्रहीत करता है, संख्यात्मक पोर्ट और उसके इच्छित खाते के साथ। मैनिफ़ेस्ट को webRequest, webRequestAuthProvider, storage और आवश्यक होस्ट अनुमतियों की आवश्यकता है। प्रॉक्सी चयन को स्वयं भी proxy अनुमति चाहिए।
पंजीकरण समकालिक रूप से होता है। स्टोरेज कॉलबैक के अंदर पढ़ा जाता है, Chrome के पास भेजने के लिए स्थापित श्रोता होने के बाद। प्रारंभिक storage promise हल होने के बाद ही पंजीकरण करने से जागने का अंतराल बनता है।
जारी करने से पहले अस्वीकृति सीमा जोड़ें
अंश पंजीकरण और खाता चयन दिखाता है। प्रत्येक अनुरोध के लिए एक सीमित पुनःप्रयास रिकॉर्ड जोड़ें ताकि अस्वीकृत पासवर्ड अनिश्चित काल तक प्रस्तुत न हो। पूरा होने या विफलता पर वह रिकॉर्ड साफ़ करें। वर्कर रुकने पर वर्कर globals गायब हो सकते हैं, इसलिए जागने के बीच आवश्यक स्थिति उपयुक्त एक्सटेंशन स्टोरेज क्षेत्र में रखें।
storage.session ब्राउज़र सत्र के भीतर वर्कर पुनःआरंभ में बना रहता है; यह ब्राउज़र पुनःआरंभ के बीच स्थायी खाता स्टोरेज नहीं है। परिभाषित करें कि कोई चयनित खाता उपलब्ध न होने पर एक्सटेंशन क्या करता है।
isProxy और challenger जाँचें किसी असंबंधित वेबसाइट चुनौती को यह खाता मिलने से रोकती हैं। यदि ब्राउज़र कभी इवेंट प्रेषित नहीं करता, तो केवल श्रोता सफ़ाई इसे उत्पन्न नहीं कर सकती: वास्तविक अनुरोध, अनुमतियाँ और ब्राउज़र व्यवहार अलग से जाँचें।