About Chat++

Chat++ for Chatwork vốn là một extension nhằm bổ sung các tính năng thú vị cho Chatwork. Ở thời điểm hiện tại (5/2016) extension cho Chrome có gần 2000 users sử dụng thường xuyên.

Bạn có thể xem thêm thông tin về Chat++ tại trang chủ, hoặc tại bài viết trên Viblo

Chat++ loves Firefox!

Cuối cùng thì sau mấy ngày chỉnh sửa, vật lộn với đống quy tắc của Firefox, phiên bản Chat++ for Firefox cũng đã xuất hiện trên AMO (https://addons.mozilla.org) (dance2) (yeah3)

Search Chatwork trên AMO cái là xuất hiện đầu tiên luôn (honho)

chatpp

Firefox WebExtensions save the world!

Ý tưởng làm bản port Chat++ cho Firefox được nung nấu từ cách đây phải hơn nửa năm, kể từ khi mà tôi tình cờ biết đến một bài blog của Mozilla thông báo về sự ra đời của WebExtensions, thứ sẽ thay đổi tương lai của các Addons cho Firefox.

Hiểu một cách đơn giản thì WebExtensions là các hàm API mới được đưa vào Firefox, giúp nó chạy được các hàm API của … Chrome =))

Hay nói cách khác, WebExtensions sẽ giúp việc chuyển đổi một extension được viết cho Chrome có thể chạy được trên Firefox mà không phải chỉnh sửa quá nhiều. Easy Life! (honho)

Thế nhưng đời không như là mơ. (khoc2)

Lần đầu tiên tôi nỗ lực port Chat++ là khi mà Firefox mới đang ở version 41, trong khi từ phiên bản 42 mới được thông báo là bắt đầu hỗ trợ WebExtensions.
Phải nói là WebExtensions trên Firefox beta khi đó (version 42) nó có quá nhiều bug, và quá nhiều hàm API chưa được implement (facepalm). Điều đó buộc tôi phải thử nghiệm trên phiên bản nightly là version 44. May sao, một vài cái hoạt động được =))

Thế nhưng tôi cũng đã phải mất đến cả tuần đánh vật với đống code rối mù của Chat++, sửa lên sửa xuống thì cuối cùng mới có thể tạo ra được cái addon “chạy được” trên Firefox 44. Bởi vẫn có nhiều hàm API của Chrome vẫn chưa hoạt động trên Firefox 44, có cái hoạt động được nhưng lại … không theo ý muốn, hay thiếu ổn định :v

Thất vọng với tình trạng của WebExtensions, tôi đành bỏ cuộc việc cải thiện addon để nó hoạt động tốt với Firefox. Đành phải chờ khi nào bản thân cái WebExtension được cải thiện hơn thì tính tiếp vậy.

Trong khi chờ đợi điều đó, Chat++ được viết lại bằng ES6, thay đổi khá nhiều thành phần, với mục đích là: “Sau này nếu có phải làm extension cho Firefox thì sẽ đỡ phải sửa nhiều code.”

Bẵng qua hơn nửa năm, tôi có một đợt nghỉ đến 4 ngày, và thế là tự động viên mình tiếp tục công việc giang giở từ trước. Hiện giờ, phiên bản chính thức của Firefox đã là 46, phiên bản nightly đã là 49, nhìn qua thì có vẻ là ổn đây :D

Code của Chat++ cũng đã … đỡ rối rắm hơn ngày trước =)), thế là tôi chỉ mất có một ngày để chỉnh sửa, debug, và làm cho nó hoạt động với Firefox (honho) Nhanh hơn là tôi nghĩ ban đầu :D

Tuy nhiên, một điều khiến tôi thất vọng là WebExtensions không được cải thiện nhanh như tôi mong đợi. Tôi vẫn gặp phải nhiều lỗi liên quan đến Chrome API trên Firefox 46 và 47. Và bản port chỉ hoạt động tốt trên Firefox 48 trở lên. Nếu như chịu khó tìm hiểu nguyên nhân và chấp nhận sửa thêm nhiều đoạn code, thì chắc vẫn có thể làm cho nó hoạt động trên Firefox 46, nhưng cuối cùng tôi đã từ bỏ ý nghĩ đó, bởi một vài lý do:

  • Không làm việc với Firefox mấy nên tôi không quen với việc debug trên Firefox. Hơn nữa debug addons trên Firefox cũng lằng nhằng quá, tôi phải bật mấy cái console khác nhau. Tôi cũng không thể check API trực tiếp từ Console. ;(

  • Theo một thông báo trên trang document về WebExtensions trên trang chủ Mozilla ở thời điểm hiện tại thì:

WebExtensions are currently in an experimental alpha state. From Firefox 46, you can publish WebExtensions to Firefox users, just like any other add-on. We’re aiming for a first stable release in Firefox 48.

Vâng, Mozilla vẫn đang nỗ lực để release bản Stable của WebExtensions trên Firefox 48. Đó cũng có thể là lý do mà bản port chạy ngon trên Firefox từ 48 chăng :v Nhưng kệ, nếu Mozilla đã thông báo phiên bản hiện tại vẫn chưa ổn định, và từ Firefox 48 mới là stable thì mình cũng cứ để addon của mình require min version là 48 đi =))

  • Lười quá (khoc2) (okay) Mấy ngày nghỉ định làm addons cho Firefox thì lại trùng khớp với mấy ngày diễn ra giải Dota 2 WePlay League Season 3 mới chết chứ. Có EG tham gia, không thể không xem rồi =))

Firefox và cách review extension khó chịu

Tôi chưa từng làm một addon nào cho Firefox cả, thế nên cũng không biết là để publish một cái extension lại vất vả đến thế.

Không như Chrome, chỉ cần up lên là tầm 30 phút sau, phiên bản mới sẽ được “lên sóng”, để đưa được addon lên AMO, nó cần phải được “kiểm duyệt” bởi đội ngũ AMO Reviewer Team. Theo miêu tả trên trang Review Policies của Mozilla thì họ là “group of experienced add-on developers that volunteer to help the Mozilla project by reviewing add-ons to ensure a stable and safe experience for users”.

Mục đích thì cũng là tốt, là hay đấy, nhưng mà đổi lại thì addon của bạn sẽ bị “giữ lại”, không thể public ra được trong một thời gian, phụ thuộc vào kiểu review mà bạn chọn, Full Review hay Preliminary Review. Nhanh thì tầm hơn nửa ngày, chậm thì vài ngày chứ chẳng chơi. Và kết cục bi thảm nhất xảy đến là nó sẽ bị reject bởi reviewer.

Và trong lần đầu tiên submit, Chat++ đã bị reject. (facepalm3)

Tôi đã hơi đứng hình khi nhận được mail từ Mozilla với nội dung:

Hello,

Your add-on, Chat++ for Chatwork 0.1.2, has been reviewed and did not meet the criteria for being hosted in our gallery.

Comments:
This version didn’t pass review because of the following problems:

  1. This add-on is creating DOM nodes from HTML strings containing potentially unsanitized data, by assigning to innerHTML, jQuery.html, or through similar means. Aside from being inefficient, this is a major security risk. For more information, see https://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion.

This version of your add-on has been disabled. You may re-request review by addressing the reviewer’s comments and uploading a new version at https://addons.mozilla.org/en-US/developers/addon/chat-for-chatwork/versions

If you want to respond to this review, or have any questions about it, please reply to this email or join #amo-editors on irc.mozilla.org. To learn more about the review process, please visit https://developer.mozilla.org/en-US/Add-ons/AMO/Policy/Reviews

(wtf2)

Thực tế thì ngay từ lúc upload addon lên, nó được được automated test bởi các công cụ của Mozilla, và đã có warning báo rằng addon của tôi có thể sẽ bị reject bởi sử dụng innerHTML.
Nhưng mà thực tế thì cái innerHTML đó được dùng bởi các libraries như jQuery, highlightjs, caretpositionjs (facepalm2), sửa bằng răng bây giờ. (khoc3)
Thế là thôi cứ nhắm mắt cho qua vậy.

Ai ngờ cuối cùng nó bị reject (facepalm)

May thay, Mozilla chừa lại một con đường sống cho những nhà phát triển addon là có thể “khiếu nại” bằng cách reply cái mail của họ. Thôi đành gửi mail “khóc lóc” vậy =))

Thank you for your response about my extension in AMO.
Actually, I have read the Validation Results and knew that my extension has some issues with using innerHTML.
However, the usage of innerHTML came from third party libraries, not from my own codes. I hope that you can consider this.

I have searched through my js codes for innerHTML, and it is being used by the following libraries:
– Caretposition.js ( https://github.com/akiroom/caretposition.js )
– Highlight js ( https://github.com/isagalaev/highlight.js/ )
– jQuery
(The above libraries are concatenated into only one file named “libs.js” in my extension)

I would appreciate it if you could review my extension again, and give it a chance.

Thank you very much.

Và sau tầm 10 tiếng chờ đợi, kết quả là (yeah3)

Hi Tran,
Those are acceptable libraries. I will inform your reviewer.

Thế là được xem xét lại =))

Vài tiếng sau:

Your add-on, Chat++ for Chatwork 0.1.2, has been fully reviewed and is now available for download in our gallery at https://addons.mozilla.org/addon/chatpp-for-chatwork/

Comments:
Verified these are from 3rd party libs and they have decent enough level of sanitization. Your addon was approved.

Bên cạnh đó còn là một cái mail khác

Dear Tran,
In your next version, please do not splice the 3rd party libraries together. They must be separate.

Hoá ra việc mình concat hết các libraries thành một file js duy nhất đã khiến đội reviewer họ không check kỹ và reject addon. Rút kinh nghiệm, từ lần sau lại để nguyên trạng thái các libraries vậy, mặc dù sẽ phải inject dài dòng hơn một chút. (okay)

Sau khi thử nghiệm thành công với các phiên bản được accepted và chạy được trên Firefox 48, 49 (không biết có lỗi gì không =))), công việc cuối cùng của tôi là chỉnh sửa lại code, tách các libraries ra, và đặt lại tên phiên bản thành 5.0.x cho giống với bên Chrome.

Cuối cùng là chỉnh sửa lại một chút trang Chat++ Homepage với thông báo về sự ra đời của phiên bản Firefox!

0 comments

Leave a reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.