Backed out changeset 496886cb30a5 (bug 1867152) for bc failures on browser_user_input...
[gecko.git] / browser / actors / AboutPocketParent.sys.mjs
blobae40dfa1d90dc54163e76aaa07b6b2c05feb29b0
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 const lazy = {};
6 ChromeUtils.defineESModuleGetters(lazy, {
7   pktApi: "chrome://pocket/content/pktApi.sys.mjs",
8   SaveToPocket: "chrome://pocket/content/SaveToPocket.sys.mjs",
9 });
11 export class AboutPocketParent extends JSWindowActorParent {
12   sendResponseMessageToPanel(messageId, payload) {
13     this.sendAsyncMessage(`${messageId}_response`, payload);
14   }
16   isPanalAvailable() {
17     return !!this.manager && !this.manager.isClosed;
18   }
20   async receiveMessage(message) {
21     switch (message.name) {
22       case "PKT_show_signup": {
23         this.browsingContext.topChromeWindow?.pktUI.onShowSignup();
24         break;
25       }
26       case "PKT_show_saved": {
27         this.browsingContext.topChromeWindow?.pktUI.onShowSaved();
28         break;
29       }
30       case "PKT_show_home": {
31         this.browsingContext.topChromeWindow?.pktUI.onShowHome();
32         break;
33       }
34       case "PKT_close": {
35         this.browsingContext.topChromeWindow?.pktUI.closePanel();
36         break;
37       }
38       case "PKT_openTabWithUrl": {
39         this.browsingContext.topChromeWindow?.pktUI.onOpenTabWithUrl(
40           message.data,
41           this.browsingContext.embedderElement.contentPrincipal,
42           this.browsingContext.embedderElement.csp
43         );
44         break;
45       }
46       case "PKT_openTabWithPocketUrl": {
47         this.browsingContext.topChromeWindow?.pktUI.onOpenTabWithPocketUrl(
48           message.data,
49           this.browsingContext.embedderElement.contentPrincipal,
50           this.browsingContext.embedderElement.csp
51         );
52         break;
53       }
54       case "PKT_resizePanel": {
55         this.browsingContext.topChromeWindow?.pktUI.resizePanel(message.data);
56         this.sendResponseMessageToPanel("PKT_resizePanel");
57         break;
58       }
59       case "PKT_getTags": {
60         this.sendResponseMessageToPanel("PKT_getTags", lazy.pktApi.getTags());
61         break;
62       }
63       case "PKT_getRecentTags": {
64         this.sendResponseMessageToPanel(
65           "PKT_getRecentTags",
66           lazy.pktApi.getRecentTags()
67         );
68         break;
69       }
70       case "PKT_getSuggestedTags": {
71         // Ask for suggested tags based on passed url
72         const result = await new Promise(resolve => {
73           lazy.pktApi.getSuggestedTagsForURL(message.data.url, {
74             success: data => {
75               var successResponse = {
76                 status: "success",
77                 value: {
78                   suggestedTags: data.suggested_tags,
79                 },
80               };
81               resolve(successResponse);
82             },
83             error: error => resolve({ status: "error", error }),
84           });
85         });
87         // If the doorhanger is still open, send the result.
88         if (this.isPanalAvailable()) {
89           this.sendResponseMessageToPanel("PKT_getSuggestedTags", result);
90         }
91         break;
92       }
93       case "PKT_addTags": {
94         // Pass url and array list of tags, add to existing save item accordingly
95         const result = await new Promise(resolve => {
96           lazy.pktApi.addTagsToURL(message.data.url, message.data.tags, {
97             success: () => resolve({ status: "success" }),
98             error: error => resolve({ status: "error", error }),
99           });
100         });
102         // If the doorhanger is still open, send the result.
103         if (this.isPanalAvailable()) {
104           this.sendResponseMessageToPanel("PKT_addTags", result);
105         }
106         break;
107       }
108       case "PKT_deleteItem": {
109         // Based on clicking "remove page" CTA, and passed unique item id, remove the item
110         const result = await new Promise(resolve => {
111           lazy.pktApi.deleteItem(message.data.itemId, {
112             success: () => {
113               resolve({ status: "success" });
114               lazy.SaveToPocket.itemDeleted();
115             },
116             error: error => resolve({ status: "error", error }),
117           });
118         });
120         // If the doorhanger is still open, send the result.
121         if (this.isPanalAvailable()) {
122           this.sendResponseMessageToPanel("PKT_deleteItem", result);
123         }
124         break;
125       }
126       case "PKT_log": {
127         console.log(...Object.values(message.data));
128         break;
129       }
130     }
131   }