Skip to content

Commit 6be1989

Browse files
committed
use v3 api
1 parent 1465f24 commit 6be1989

File tree

2 files changed

+74
-40
lines changed

2 files changed

+74
-40
lines changed

Diff for: background.mjs

+41-39
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,35 @@ browser.webRequest.onBeforeSendHeaders.addListener(
3535
["blocking", "requestHeaders"]
3636
);
3737

38+
browser.webRequest.onBeforeSendHeaders.addListener(
39+
function(e) {
40+
let requestHeaders = e.requestHeaders;
41+
42+
requestHeaders =
43+
requestHeaders.filter(requestHeader =>
44+
requestHeader.name.toLowerCase() !== "Origin".toLowerCase()
45+
);
46+
requestHeaders =
47+
requestHeaders.filter(requestHeader =>
48+
requestHeader.name.toLowerCase() !== "Referer".toLowerCase()
49+
);
50+
51+
requestHeaders.push({
52+
name: "Referer",
53+
value: "https://lens.google.com/"
54+
});
55+
56+
requestHeaders.push({
57+
name: "Origin",
58+
value: "https://lens.google.com"
59+
});
60+
61+
return { requestHeaders }
62+
},
63+
{ urls: ["https://lens.google.com/v3/*"] },
64+
["blocking", "requestHeaders"]
65+
);
66+
3867
async function search_on_google_lens(image_url, tab) {
3968
browser.tabs.sendMessage(tab.id, {
4069
type: "load-start",
@@ -84,46 +113,19 @@ async function search_on_google_lens(image_url, tab) {
84113
thinking: image_url.startsWith(location.origin)
85114
});
86115

87-
const image_data_form = new FormData();
88-
image_data_form.set("encoded_image", image_data_processed);
89-
image_data_form.set("image_url", `https://${generateRandomString(12)}.com/images/${generateRandomString(12)}`); // Send fake URL
90-
image_data_form.set("sbisrc", "Chromium 98.0.4725.0 Windows");
91-
const result = await fetchPlus(
92-
`https://lens.google.com/upload?ep=ccm&s=&st=${generateRandomString(12)}`,
93-
{
94-
method: "POST",
95-
body: image_data_form,
96-
headers: {
97-
"Origin": "https://lens.google.com",
98-
"Referer": "https://lens.google.com/",
99-
}
100-
}
101-
)
102-
.then(res => {
103-
if (res.status === 200) {
104-
return res;
105-
} else {
106-
throw new Error(`${res.status} ${res.statusText}`);
107-
}
108-
})
109-
.then(data => data)
110-
.catch(e => {
111-
browser.tabs.sendMessage(tab.id, { type: "google-post-error" });
112-
throw e;
113-
});
116+
const image_data_processed_dataurl = await new Promise((resolve, reject) => {
117+
const reader = new FileReader();
118+
reader.onloadend = () => resolve(reader.result);
119+
reader.onerror = reject;
120+
reader.readAsDataURL(image_data_processed);
121+
});
114122

115-
const url = result.url;
116-
if (url) {
117-
browser.tabs.sendMessage(tab.id, { type: "google-post-end" });
118-
browser.tabs.create({
119-
url: new URL(url, "https://lens.google.com").href,
120-
windowId: tab.windowId ?? undefined,
121-
openerTabId: tab.id ?? undefined,
122-
active: !settings.get("local", "newTabsLoadInBackground"),
123-
});
124-
} else {
125-
throw new Error(`URL is not included in the result`);
126-
}
123+
browser.tabs.sendMessage(tab.id, {
124+
type: "open-new-tab",
125+
data_url: image_data_processed_dataurl,
126+
});
127+
128+
browser.tabs.sendMessage(tab.id, { type: "google-post-end" });
127129
}
128130

129131
browser.browserAction.onClicked.addListener(function () {

Diff for: content_script.js

+33-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ if (!window.browser) {
77
window.browser = chrome;
88
}
99

10-
browser.runtime.onMessage.addListener(function (message) {
10+
browser.runtime.onMessage.addListener(async function (message) {
1111
console.log("[Content Scripts]", `message received: ${message.type}`);
1212

1313
const elem = document.getElementById("search_on_google_lens_elem");
@@ -39,6 +39,38 @@ browser.runtime.onMessage.addListener(function (message) {
3939
elem.remove();
4040
alert(browser.i18n.getMessage("sendingImageError"));
4141
break;
42+
case "open-new-tab":
43+
const container = document.createElement("div");
44+
container.style.display = "none";
45+
document.body.appendChild(container);
46+
47+
const form = document.createElement("form");
48+
form.action = `https://lens.google.com/v3/upload?ep=ccm&s=&st=${Date.now()}`;
49+
form.method = "POST";
50+
form.enctype = "multipart/form-data";
51+
form.target = "_blank";
52+
container.appendChild(form);
53+
54+
const file_input = document.createElement("input");
55+
file_input.type = "file";
56+
file_input.name = "encoded_image";
57+
form.appendChild(file_input);
58+
59+
const pid_input = document.createElement("input");
60+
pid_input.type = "text";
61+
pid_input.name = "processed_image_dimensions";
62+
pid_input.value = "1000,1000";
63+
64+
const result = await fetch(message.data_url);
65+
const file = new Blob([await result.arrayBuffer()]);
66+
const data_transfer = new DataTransfer();
67+
const file_obj = new File([file], "image.jpg", { type: "image/jpeg" });
68+
data_transfer.items.add(file_obj);
69+
file_input.files = data_transfer.files;
70+
71+
form.submit();
72+
73+
container.remove();
4274
default:
4375
break;
4476
}

0 commit comments

Comments
 (0)