প্রক্সি প্রোফাইল পরিবর্তন করলে নির্বাচিত অ্যাকাউন্ট পরিবর্তন হওয়া উচিত, আরেকটি 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 এবং প্রয়োজনীয় host অনুমতি দরকার। প্রক্সি নির্বাচনের নিজেও proxy অনুমতি দরকার।

নিবন্ধন সিঙ্ক্রোনাসভাবে ঘটে। Chrome-এর একটি ইনস্টল করা লিসেনার থাকার পরে কলব্যাকের ভিতরে storage পড়া হয়। প্রাথমিক storage promise সমাধান হওয়ার পরেই নিবন্ধন করলে জাগরণের ফাঁক তৈরি হয়।

মুক্তির আগে একটি প্রত্যাখ্যান সীমা যোগ করুন

অংশটি নিবন্ধন ও অ্যাকাউন্ট নির্বাচন দেখায়। প্রতিটি অনুরোধের জন্য একটি সীমিত পুনঃচেষ্টা রেকর্ড যোগ করুন যাতে প্রত্যাখ্যাত পাসওয়ার্ড অবিরাম জমা না হয়। সমাপ্তি বা ব্যর্থতায় সেই রেকর্ড পরিষ্কার করুন। ওয়ার্কার বন্ধ হলে ওয়ার্কার globals হারিয়ে যেতে পারে, তাই জাগরণের মধ্যে প্রয়োজনীয় অবস্থা উপযুক্ত এক্সটেনশন storage এলাকায় রাখুন।

storage.session ব্রাউজার সেশনের মধ্যে ওয়ার্কার পুনরারম্ভে টিকে থাকে; এটি ব্রাউজার পুনরারম্ভের মধ্যে স্থায়ী অ্যাকাউন্ট storage নয়। কোনো নির্বাচিত অ্যাকাউন্ট না থাকলে এক্সটেনশন কী করে তা নির্ধারণ করুন।

isProxy ও challenger পরীক্ষা একটি অসম্পর্কিত ওয়েবসাইট challenge-কে এই অ্যাকাউন্ট পাওয়া থেকে বিরত রাখে। ব্রাউজার যদি কখনো ইভেন্ট না পাঠায়, শুধু লিসেনার পরিষ্কার করে তা তৈরি করা যায় না: প্রকৃত অনুরোধ, অনুমতি ও ব্রাউজার আচরণ আলাদাভাবে পরীক্ষা করুন।

সম্পর্কিত নিবন্ধ