/* ĠThis ĠSource ĠCode ĠForm Ġis Ġsubject Ġto Ġthe Ġterms Ġof Ġthe ĠMozilla ĠPublic Ċ Ġ* ĠLicense , Ġv . Ġ 2 . 0 . ĠIf Ġa Ġcopy Ġof Ġthe ĠM PL Ġwas Ġnot Ġdistributed Ġwith Ġthis Ċ Ġ* Ġfile , ĠYou Ġcan Ġobtain Ġone Ġat Ġhttp :// mozilla . org / MPL / 2 . 0 /. Ġ*/ Ċ Ċ package Ġcom . example . system engine view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġmo zilla . components . browser . engine . system . System Engine Session Ċ import Ġmo zilla . components . browser . error pages . Error Pages Ċ import Ġmo zilla . components . browser . error pages . ErrorType Ċ import Ġmo zilla . components . concept . engine . Engine Session Ċ import Ġmo zilla . components . concept . engine . request . Request Interceptor Ċ Ċ class ĠApp Request Interceptor ( private Ġval Ġcontext : ĠContext ) Ġ: ĠRequest Interceptor Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonLoad Request ( ĊĠĠĠĠĠĠĠ Ġengine Session : ĠEngine Session , ĊĠĠĠĠĠĠĠ Ġuri : ĠString , ĊĠĠĠĠĠĠĠ Ġhas User Gesture : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġis Same Domain : ĠBoolean ĊĠĠĠ Ġ): ĠRequest Interceptor . Inter ception Response ? Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" URL ", Ġuri ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Load Request ( engine Session , Ġuri , Ġhas User Gesture , Ġis Same Domain ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError Request ( ĊĠĠĠĠĠĠĠ Ġsession : ĠEngine Session , ĊĠĠĠĠĠĠĠ Ġerror Type : ĠError Type , ĊĠĠĠĠĠĠĠ Ġuri : ĠString ? ĊĠĠĠ Ġ): ĠRequest Interceptor . ErrorResponse ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimproved ErrorType Ġ= Ġimprove ErrorType ( error Type ) ĊĠĠĠĠĠĠĠ Ġval Ġimage Needed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġerror Page Ġ= Ġif Ġ( image Needed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrisk Level Ġ= Ġget Risk Level ( impro ved ErrorType ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠError Pages . create Url Encoded Error Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Type Ġ= Ġimproved ErrorType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġuri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhtml Resource Ġ= Ġrisk Level . html Res ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). replace (" resource :// android / assets ", Ġ" file :/// android _ asset ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠError Pages . create Error Page ( context , Ġimproved ErrorType , Ġuri ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( image Needed ) ĠRequest Interceptor . ErrorResponse . Uri ( errorPage ) Ċ // ĠĠĠĠĠĠĠ Ġelse ĠRequest Interceptor . ErrorResponse . Content ( errorPage ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWork around : ĊĠĠĠĠĠĠĠ Ġ// ĠFor Ġurl Ġbased Ġerror Ġpage Ġwe Ġneed Ġdo Ġwindow . history . back () Ġon Ġclick Ġbutton ; ĊĠĠĠĠĠĠĠ Ġ// ĠFor Ġcontent Ġbased Ġerror Ġpage Ġwe Ġneed Ġadd Ġhistory Url ; ĊĠĠĠĠĠĠĠ Ġ// ĠAnd Ġreturn Ġnull . ĊĠĠĠĠĠĠĠ Ġreturn Ġ( context . app . session Manager . get Engine Session () Ġas ĠSystem Engine Session ). web View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Needed ) Ġload Url ( errorPage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġload Data With Base URL ( uri , Ġerror Page , Ġ" text / html ", Ġ" UTF 8 ", Ġuri ) ĊĠĠĠĠĠĠĠ Ġ}. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhere Ġpossible , Ġthis Ġwill Ġmake Ġthe Ġerror Ġtype Ġmore Ġaccurate Ġby Ġincluding Ġinformation Ġnot ĊĠĠĠĠ Ġ* Ġavailable Ġto ĠAC . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġimprove ErrorType ( error Type : ĠError Type ): ĠError Type Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġnot Ġan Ġideal Ġsolution . ĠFor Ġcontext , Ġsee : ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// github . com / mozilla - mobile / android - components / pull / 5 0 6 8 # issuecomment - 5 5 8 4 1 5 3 6 7 ĊĊĠĠĠĠĠĠĠ Ġval Ġis Connected : ĠBoolean Ġ= Ġcontext . isConnected () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Type Ġ== ĠError Type . ERROR _ UNKNOWN _ HOST Ġ&& Ġ! isConnected Ġ-> ĠError Type . ERROR _ NO _ INTER NET ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror Type ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Risk Level ( error Type : ĠError Type ): ĠR isk Level Ġ= Ġwhen Ġ( error Type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠError Type . UNKNOWN , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ NET _ INTERRUPT , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ NET _ TIMEOUT , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ CONNECTION _ REF USED , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ UNKNOWN _ SOCKET _ TYPE , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ RE DIRECT _ LOOP , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ OFF LINE , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ NET _ RESET , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ UN SAFE _ CONTENT _ TYPE , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ CORR UP TED _ CONTENT , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ CONTENT _ CR ASH ED , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ INVALID _ CONTENT _ ENCODING , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ UNKNOWN _ HOST , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ MAL FOR MED _ URI , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ FILE _ NOT _ FOUND , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ FILE _ ACCESS _ DEN IED , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ PROXY _ CONNECTION _ REF USED , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ UNKNOWN _ PROXY _ HOST , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ NO _ INTER NET , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ UNKNOWN _ PROTOCOL Ġ-> ĠR isk Level . Low ĊĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ SECURITY _ BAD _ CERT , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ SECURITY _ SSL , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ PORT _ BLOCK ED Ġ-> ĠR isk Level . Medium ĊĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ SAFE BRO WS ING _ H AR MF UL _ URI , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ SAFE BRO WS ING _ MAL WARE _ URI , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ SAFE BRO WS ING _ PH ISH ING _ URI , ĊĠĠĠĠĠĠĠ ĠError Type . ERROR _ SAFE BRO WS ING _ UN W ANT ED _ URI Ġ-> ĠR isk Level . High ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġenum Ġclass ĠR isk Level ( val Ġhtml Res : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLow ( LOW _ AND _ MEDIUM _ R IS K _ ERROR _ PAGES ), ĊĠĠĠĠĠĠĠ ĠMedium ( LOW _ AND _ MEDIUM _ R IS K _ ERROR _ PAGES ), ĊĠĠĠĠĠĠĠ ĠHigh ( HIGH _ R IS K _ ERROR _ PAGES ), ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠLOW _ AND _ MEDIUM _ R IS K _ ERROR _ PAGES Ġ= Ġ" low _ and _ medium _ risk _ error _ pages . html " ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠHIGH _ R IS K _ ERROR _ PAGES Ġ= Ġ" high _ risk _ error _ pages . html " ĊĠĠĠ Ġ} Ċ } Ċ