From 58ecc3a2580f5716d7d7a0005d940b3935361a3b Mon Sep 17 00:00:00 2001 From: "jihoon.chung" Date: Fri, 24 Aug 2012 08:26:17 +0900 Subject: [PATCH] Update wrt_0.8.86 --- .gitignore | 42 ++ CMakeLists.txt | 5 +- data/default_icon_tizen.png | Bin 0 -> 12193 bytes ...idget_default_icon.png => default_icon_wac.png} | Bin debian/changelog | 15 + packaging/wrt.spec | 6 +- src/CMakeLists.txt | 2 +- src/api_new/CMakeLists.txt | 3 + src/api_new/core_module.cpp | 184 ++++++--- src/api_new/core_module.h | 19 +- src/api_new/i_runnable_widget_object.h | 23 +- src/api_new/runnable_widget_object.cpp | 168 ++------ src/api_new/runnable_widget_object.h | 16 +- src/view/common/CMakeLists.txt | 6 +- src/view/common/application_launcher.cpp | 136 ++++-- src/view/common/view_logic_apps_support.cpp | 10 + src/view/common/window_data.cpp | 34 -- src/view/common/window_data.h | 3 - src/view/i_view_module.h | 12 +- src/view/webkit/view_logic.cpp | 53 +-- src/view/webkit/view_logic.h | 10 +- src/wrt-client/wrt-client.cpp | 129 +++++- src/wrt-client/wrt-client.h | 9 +- src/wrt-launcher/CMakeLists.txt | 3 +- src/wrt-launcher/wrt-launcher.cpp | 457 ++++++++++----------- 25 files changed, 744 insertions(+), 601 deletions(-) create mode 100644 .gitignore create mode 100644 data/default_icon_tizen.png rename data/{wrt_widget_default_icon.png => default_icon_wac.png} (100%) mode change 100755 => 100644 src/wrt-launcher/CMakeLists.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8eaac43 --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +build_log +*.log +*.pyc +usr +opt +*.o +*.os +*.exe +packages +binaries +*.ipk +*~ +*.lo +.libs +.deps +*.la +Makefile.in +Makefile +Documentation/html/ +build-stamp +*.cmake +CMakeFiles +CMakeCache.txt +data/*.edj +cmake_build_tmp/ +.cproject +.project +debian/files +debian/tmp/ +debian/wrt/* +debian/wrt.debhelper.log +debian/wrt.install +debian/wrt.postinst +debian/wrt.postinst.debhelper +debian/wrt.postrm.debhelper +debian/wrt.substvars +debian/wrt-dbg/ +debian/wrt-dbg.substvars +debian/wrt-test/ +debian/wrt-test.debhelper.log +debian/wrt-test.substvars + diff --git a/CMakeLists.txt b/CMakeLists.txt index ab2fab2..8013b07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -146,7 +146,10 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/parental.png DESTINATION /usr/etc/wrt/ PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ GROUP_WRITE ) -INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/wrt_widget_default_icon.png +INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/default_icon_tizen.png + DESTINATION share/wrt-engine/ + ) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/default_icon_wac.png DESTINATION share/wrt-engine/ ) INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/userAgentProfile.xml diff --git a/data/default_icon_tizen.png b/data/default_icon_tizen.png new file mode 100644 index 0000000000000000000000000000000000000000..1c3ecd61cbf721d166cc48c576ce7af2fdfedb3f GIT binary patch literal 12193 zcmV;SFJ91zP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z001P+NklWs_LHU>Dk?xUGJ`UkQ7bQ;(dyPXD<6bFBD~S^T^n2y%GcA3lBp}-vi_v#{*^wW>KP@b<8}XJ%*>uQj&g7dR0*~XEIF3=CM;t|HrO;Z> z7sM>cnF}9BK+aKCKSx>CS}b!s;JA=8Pf^Du+F2f8tR?D2Bv}5a74TY9@Ke<`Nfe_B z>S${}4q46&CnwLDMYM}3Nxx@AyGU$5$LftSbh}-o*8KXW$5#&|PZcb26oIwmZT?$` zXct$K{{Mk!qbMRy6296D_~NeMT34V1Bqlx2m^qO1%_Q16$BjeKw<6IRW9aoFkb>Xd z_4!}71X>ET0Hnp(DVgs#k!Tkd{^0r41HKiBHc1kCy&mVfKEHQI@YQ{RmVmJ!1sI5J zDu}y+oVz62g~|@{xc6W9(f+&f=lyy%X&`CF!Gyc8-8& zz{%YZZIUE(dp*A1Q2h6sl9%@TR-X#qj=~SpW<0=7PkfFk$h)@YyE)Ffn_d`l9$-cr zM={+v;y1TEK6x1qVv8QJc8frazz+rzYZro%#gn83J>{N-KRjMP7@}RggpkBBonDt0 zb~OL^oJGk=vPHV%_}s1GRgHz%Oj`Rm z5ewrUj>pwU3G%%q+S$kVJyzehZq+eM$8j8!7{jM;PhQhlS7s37N?=qWgHl8$uKrde z+Ih$8BO{&%)UE1uyC|jj+V1oqAhAQJ86;q1&=lL@``8Ccw8w;|nYEv>dpo5RaleUn zR>P#*>rpC~XDVQ*giJJ)60tCjq)jINzh?oxhgRP=7Ry*3aICSA1&MYVSD3_*7(*wD z5mve5W()<4C}H3g&Jz;5NaKBRYkseUKiLnkc7B`h7)7)rrx>gyPGYbSdYV<$<5uhq zKhzXOI8MlNKsFP0(a~{<)+7dFjq{=;!6LBMIJ7VZq;%0(`n*7(l|%@6SArjrPX?B> zo!8u66xSDkoa}MkP6zF2D&;cIh1YrEP-89WXpF@oQmGEVQ<8q*KKuyNR|=RUAxdIQ zoL~i5V=*?((xgZU+#-~6?_r&uwe}DKtQGj4X7{kg%XfOb(+&9Ifsd6ED+EvG4Ijuy zeE(9HBGVjq?NH2;gmCKY$C4TaW0-t}$I6)wAX&4jUU~!RAAAWod z@5>pYUXMy;3D5Jeo=4z$Alx;y)~;79oN~h;L@5afgcRvJL9^N9SHF6RfAOYZ&&v@7 zK1OS-6j&j6u>lb9Z@oN!?L>#4SZ)$^dw5zQq?}*z%rcbC$Yl@(jTf>W@K}g324f5= zwZLk6k)Q3!Bifz?&XA#Z5C!`K*@yF&w`xM*AnBxKCM(5 z&M}~#0{kO@qg5V3?E$!`THL(^Y32V<*5?^f9ZXS4{?n*-@L_%l@(T& zSIFf;q*NnrY^-bIJB)W?>t8>6-+%3=fB6k|j3CZ=&iXULAODtF>{pq`qly3};s3Tu zT#ZBiWO&H4y&V^>YBd#-r}qOM@cd=3+eK?lKA#)AoOQ9gG5qXzEFrrse)xTo3m49@ z7ss4=XnF{}C?4Pa( z=Lu56&BW(3?K;g+@iDfEyFENl52L!VZ?1U&L_4cN-mm}UbNPwaj2VWgfBC79mtT63 za;e0LwbPVJMU>JEL_X0pakd1BFo%tK=ZwXG-ML zhZ#A+1EYjIq6h(BjH)!yd|2&M={E2^?Q(|EQri>`xDP}-QERc5B(47_rIAvOz?iW% zEep6?=zBc=#1pKpo}yeS4~1_h8%2HPIjoOKl7z%0#7X)%iD|Z4Y;0`s%F8cP*m{$H z_9p~C_E?{E-pyAx1qUbI$9g#EYhiF>c@>6WI(qVzcII;y503oUj(9 z6iTYQ9{G-w7=a)R{jpHd4oK7*2Sr**mX?-i93Eng!74Gcwdf`j&46F};E{cc{r!Ee zT)x7|6DKgn^5*NW@mJ2AWu>sfr#3vcjYzYz;YkCSk(1Uwi;(;Of7)wtR(5zoHV}!KDA!O5q0qolcirE*uJHVz|k=T2K^?2)_S$4i6h#x_A)*oLXB$AlTjA;o8+J zJXhZ3pFjR2pWX`i!hSdgJ+twC+VjtPEk58id0MsD-`wC}e~$|X2Lzta%83;`tw%g~ zkcdsoXsxvz?Co=A#p6;Z$2SfwpGqXp79<}kS)MN${HTKv!hMK-k!#LaNFVvnr=ZEvx+yT|F%YvjUQT7)}65Cq)b z+{C;5b^giYPw+&(#(%n19Ep4emM*80@N+?%=Ykd=@LC*huCu+p!|R6!_(4FiSmdG8 zr^)B@|7rEoL68{?EeQd>=h1Gr(MlmFyv`1kI0`|j7k4|n zd+{PCPM)MtC?ci6T8rmtma0`e&u4pko43xr$qzpKFvYbq{Q6FwjYv-ttAwJmd}qGJ z(|(ud!ZwGu*V(?Y!y5+&1Ytm_SfpM*OBjauzK`#DX*qIomOT2AW7O?*j-kP?Bze}o_mgG>U}7kUak z#tz`e4sK4+K@iYtcgW|$(RzHp!DCDcL79-Z7jf~z13<65U67{oZ z$mMc)zK`$uF36ZtcF0ynC-Z6JqF?tK33@P5#I@Y=jJxw zXf`RNWt95av*f}YzVG4reW7Ow*3M191`V0f&ooqm)|yhO#P;?!A1vnh%DzGgo4TY; zS>L8aWSwV7xX=>(;=77}c@ds2N`CmH;rWWkBRR|EOP6Ri8x#u#O2q<7>lF8gL`=p5 z$Uuy>V6a3{g!a6VFf@r1k_?RYdJ*e4ZgBeaLxf=ng0bne(R-y7<#HMAd2DZQvwdfa zAI~+|y0pbNnhlDDBIQzvwbfJjVSukawC6cU8x!cj%E!ykjDCh;6f~okDupBrLpC=z zd1f`?s|RWzWN9;`#PqPtU^#y%c^-_2&oh@14W5RNaEOqk6Lr_oeL~4uTUx#=Qm8~Cx8jDF=)@@ zkuzs0m5byG1>Qb)o_4cEp^(S-1GH8H2%HpX*4pPZW5#$uXOpP$Tp;ir3_Ynk6qU!G z5hGqOanDd8$(Xynv@7@-iecRI&GS*76%6hyz}-2dc7{Ca)tVGoz>M?pUj z29p@t?KYlvOH(W5G8-GWxO(|r!hD`w5O8X34bS(-CeaK@V$y&>;`<)uQjt=jKrR=$ zL{mu@i3#T!%PTduceY95*oBdc)cKjNq-h@FNO%rmNGZwXa%^sH@@=azUu&qT)-R<+ znhX~RNcxGTac{QXhIhLjYoxx^h~mUG=n;5Ykq-(4 zfsf~TX%|fr$H{07A}tHm>s7)aq|@z?*M&I(UBK$6o@4uo*z_V77KhKkV}3HUb_vQ% zCMP2qB#sA+b?psdEuXsyKeHx?;}}nSC@IP1bL4U%rDBO{b%{>5ORL%Bu+iYw#s*j3 zy-cZGqE=tV_cZJ4>pc9>Lr5vHX^AAC&lBcyLoc?5POpcQ0wE=ykf^jY+^<9R^9DQ8 z0~zK)LI{+UoH)76l`GdUi5U$q7b03_dPrXh+8$9(P)d`_f~vFf8b8v<#P9idEahn0!B+ zp9+0p5EAy4v9v_57a^p;_x#Z*gfXm*qL^;CgVq|8Bv|Q$*(Y-;<)GwYl||Y#epe8? z;rNl7k|X94J6k*WzCY2AIFc8pDPhpZ06DF6Y{#MoKk%_h!ZW%_LD`Yg>jeBT`dFp# zBdkRj%kNyb2q9eNYKOaqWJeyexquL2;1z|u%UlP2)hWlvaZI<{bzQQwSKPnFN$hTM zOdQ2-0eBn_o==j5ICjrRk!x!viD9{3Pa8VPFgYB{Xh##Uv1rFmmLU3HS5EEil8wh* zJtki$u(PwncNXH2e(10|CCWUCTVWk~g znq(&+XIx=3GU3s(gj9+`p}>tBH~47%Bws%Ch%+QSAZ5u&G-QNzK~Ne>3S+s|Ot{k2 zoTNuCZ$_)A>6<2rA&w)A1?_2ad6)9Xal-!o0mekG%{K*Sl~R;TC2ntSa^>wKd6D8IFrnP_NZ!G@9(~?Q-MB4WyFPmzP;tSs@HUR}9P~dRaw` zj-?2yOBJqbO}E=~<&6c1mN^_@7s&&%XDj8Bo@>{y^GxXuo5fYWa^O$zjiynMVmJry zA|Zn`hSzQ<=%+l|?G83D1EB}G9KPqJLKhQ*(ypx;(>QFTrCyIDiHQ^AW<8}Ojv_pz zDHQUAVMw`Lrqij>>vd^1TO2kHdGqx*2Fh4oSs@qZNKDVQH4}sJGag|rQVN1Fq*5xg zyR(y)PQ*e)I~f^eykwC)V9-<%kk1!buGhJK?HWJ$WJr}FpV`ZeAN?e+))Ka(U0w5L%iyp>92dettSc87z*19qE+pa0+cEEgpoc_iTD@6Yqt zN-zRLrDBO74Cr-xsJvPLa;8{)RtbY*+%aa{J>O$xc^N4sH?Cbn${YNxr=RAkiul^T z#CV$6HzbMWVXwy-KjLIy2SPGNO$^J9*8j7kCByRa?#?b7H*d0bYR#1zq#!Y7Fznm6 zs6ru694~Qa^A1rIqm`O~1cAWw+~~UJc}T7K?YBDsY&8rooNM#Kxi#d2;v)wd&_SH6@KfliRf7>p9{ku<6EEdtePp{X*4}zIQJF+Bq zj2k8=aE%b5SDZ@-mG56E| zaYYE>M#wK+yojegmX<0mt{)R7nTfdmb;_j@`}+rjhJJt9N48{atRaee940Q(;s_taP|7TMn3#`C?DjOP>W_##4Uvx!(H@fzu0+G+jF(aci{ zK^TUtEHCrOBacvBTH>7xZ_{ixIdkSLQYjjZ22m6Z5}-c0^^+Wz_>8{RpOR>`TC8tu z&}=kVURfpxLnp|7_H2hkPFdl*>^Wq4c^M%jaTHH{C!2=87I^8FrCln}DHUm#inJ;v zI;CQ|X22~~0=T|w_=V4Hv(<=^QV=J})YzV}{z?|2?1-{#W;pkV66-vEkWx`B7Vrb# zdBdGMy!PrVoIU%fYp6GyBuRpwR#uN%jVVOGue-y|8`oJ`S)ouUjC8@6SQ{+H?k!7| z3UL&%d3!URbWZ+=wPvo-{|AkbC=A?esB|NWRxrf&ene(8QRvet|>y2IZ79%s%zib-PH?Y5hCn^+TUX|`Hy z-MPcssWms2I7Xn;R-BL4Z$_1o3qzKcDr{|S(TgHH?YaK4=kdF{WfHA24xu&suN|`lvNFshVl#>MKCA{8DM>G{c;xaqcD8r8bm485 zsx=;Z_#qAt59xNh18=Z^7J_S6u2QenC>4w8x?VfC5#rYKnK3xBBez1KKorMpZ*3!m zAnNrv%vHG*hX^G`Aq5m zVxdTw@rKu4d6lz|J&Nb~^r8rD4BGR#cJ&(hTu7y|gwkr}bw{hZu5O=&sqrG4F$S$P z`9hxN!6At?{9!APr{rYeW4a>@A4{MR(m+#8`w3d>xrx}+;KR;L#P0uYA+9dtQ%lRj zd%L^bxON>W1&==dIMxbwcXsHs+nhdq8sGCKNBU+MfmH#A?;rDo}79l`;9+gUkFmQc_%2Jh|f1$yjBwv#6&IVJ=`Owe_R~9 zT~7YbEuY`LVNkw@jRiI_SlmKwafA|*B%#~wjx5yf<9+{LN=czm;L^oQXstMPY7MOw zo12?Fw0n^sDf|3JXXOYbj7CZy@(yY4xdAcK+SMYEGhPcCDM#PauSFblw~)jbI-L&R zXyo}X7X>B|Smg$ARTQVI7KKy7oF5rVl7x1F( z=DPtMZIMDEl|-rpn<|0Gl>}rG&*TNS-*h~I`%x5;%jH2x-hBOaR#sN1)obavy32C& z`8@TdDjPR%^6|&(Ts8&nSbwS#vV2ezJ?haO`%1ZOa>ilC&anFIe+G%zdk8uG=X<>f zE8u_LF7U_A01>!ev5XT`9AjdY?ph*IGD5`yE2cwIf5Y#-#rM6SSS-=$cGy_I$?B<7 zRI5uaV->^20$M4`l?t6shv?ede9!3|pNZG9vCdRacvc>8u)9YXhM9#KV;nHG7Bs4f zv=qVEJ`sxx^wJ{@Yd&>krqENu@AaIS5KClSU~_9HYBEtQ4qt6p~IA z4ZU;)P8`Q6-WNGI*r(NOvAViSrBZRD>UOjyY_WJ+Q?1olzj>1<_uk=$s*2Ait8;UJ zkBA*Q?GB}a%hZn|+VT8gtQ2uX4saiL7_`=nmanT4zqVgN`))6?BoUZIVvLJ|60K2Q zjEZ86j!B}}DW)4?MTCmoMjikqFQ(J!5XUjOT#n_H6|TH{8GyC5QxuCu*Tk7(41MW_ zLBR6L3L6{id{?E+rV4q}E=^U!lIXG2*=1MjiGt!>$eB@o*IAo=&^yX@yFHYr`NBbo zmQZMI)A>aSu^};*#7Km(m{bwcOVCk-iIiK?S{rwJ0OI511DsP`V zPoY#~WqFx=zlUJwcdLXH6bgB2wHlY-z07w!vBXVLqKTf!1D>|~9PA&E%jE{0zJ(!Y zOj&k(o$v$%-KF5CK~oeveEvdjg|Bo<1S%cqGS+R(DwNxdHF1mgumYnbQY(z7kgLu3fvz>Zw(#)hb>(#eCFQ$hg(| zzE7=IWqo~}#~W8TEO~rgog65jYi+$c!l@;}wxj_Y@WIBjr7Qx_F!O=g(6r7Fb?c zC7;Wuz2#$!h0N(zDW#~CD|9+tf{hD2|4_&q{wkH;K9SZAeikI!S&A5GN!q(8NzeNw z3b%bgLZ{nhE2#11co|=%I6tuNG3Xh2+@J9oD(5lX=EuuBJQLsI{Q1k&s#R+Bdb$CJ zxGTt+JZ?DT6@&rRYL#0X8$6o3z=@>>`v(UELFfhq79m>Z3m;|`04nC}tzf z@lmx$Vl76xEr?C}^CO9MzlN7s(tRQrKA-+b&of?&Roz22cG+7(-j_>=NJaKYF;YUHtEWr=+fN90Ed0Xx-xIWe- zhDPI%lY6hE%aM+;hBdGaKMd;zUBVq%TiF~>sYbgL{DrQH?= zQYoTdG}r}&1$Uf3O8B{=GZ!(>P=*wO+ENui@Ckx| zFqccMUJQqu?t*AJM(J2vDiU7^0omt-4=CJMT|V{> Thu, 23 Aug 2012 16:24:06 +0900 + wrt (0.8.85) unstable; urgency=low * [Engine] WRT API, Widget Controlller and Logic removed diff --git a/packaging/wrt.spec b/packaging/wrt.spec index 6898f5d..7ba425c 100644 --- a/packaging/wrt.spec +++ b/packaging/wrt.spec @@ -1,7 +1,7 @@ -#sbs-git:slp/pkgs/w/wrt wrt 0.8.85 +#sbs-git:slp/pkgs/w/wrt wrt 0.8.86 Name: wrt Summary: web runtime -Version: 0.8.85 +Version: 0.8.86 Release: 1 Group: Development/Libraries License: Apache License, Version 2.0 @@ -36,7 +36,9 @@ BuildRequires: pkgconfig(libsoup-2.4) BuildRequires: pkgconfig(ace-client) BuildRequires: pkgconfig(notification) BuildRequires: pkgconfig(libprivilege-control) +BuildRequires: pkgconfig(capi-appfw-app-manager) BuildRequires: pkgconfig(capi-system-haptic) +BuildRequires: pkgconfig(capi-web-url-download) BuildRequires: pkgconfig(wrt-plugin-loading) BuildRequires: pkgconfig(wrt-plugin-js-overlay) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7d3ae04..87bca15 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -89,12 +89,12 @@ SET(WRT_BASIC_DEP ecore-input evas eina + ewebkit2 elementary vconf cert-svc libsoup-2.4 ui-gadget-1 - aul libidn xmlsec1 secure-storage diff --git a/src/api_new/CMakeLists.txt b/src/api_new/CMakeLists.txt index 2e3cf0a..b393b83 100644 --- a/src/api_new/CMakeLists.txt +++ b/src/api_new/CMakeLists.txt @@ -25,6 +25,9 @@ SET_TARGET_PROPERTIES(${TARGET_CORE_MODULE_LIB} PROPERTIES PKG_CHECK_MODULES(CORE_MODULE_DEP libprivilege-control + ewebkit2 + wrt-plugin-js-overlay + dpl-efl REQUIRED ) diff --git a/src/api_new/core_module.cpp b/src/api_new/core_module.cpp index cca5328..fc89d13 100644 --- a/src/api_new/core_module.cpp +++ b/src/api_new/core_module.cpp @@ -16,6 +16,7 @@ /** * @file core_module.cpp * @author Przemyslaw Ciezkowski (p.ciezkowski@samsung.com) + * @author Andrzej Surdej (a.surdej@samsung.com) * @version 1.0 * @brief File contains definitions of wrt core module. */ @@ -29,6 +30,7 @@ #include #include #include +#include #include #include "localization_setting.h" #include @@ -36,8 +38,14 @@ #include #include +#include + +IMPLEMENT_SINGLETON(WRT::CoreModule) + namespace { //Anonymous +const char * const bundlePath = "/usr/lib/wrt-wk2-bundles/libwrt-wk2-bundle.so"; + std::string cutOffFileName(const std::string& path) { size_t found = path.find_last_of("/"); @@ -91,78 +99,140 @@ bool checkPaths() namespace WRT { -namespace CoreModule { - -bool Init() +class CoreModuleImpl { - DPL::Log::LogSystemSingleton::Instance().SetTag("WRT"); - LogDebug("Initialize"); - if (!checkPaths()) { - LogError("Required path does not exist"); - return false; +public: + + CoreModuleImpl() : m_initialized(false), m_ewkContext(NULL) + { + LogDebug("enter"); + } + + ~CoreModuleImpl() + { + LogError("Core module implementation destroyed"); } - Try + + bool Init() + { + if (!m_initialized) { + DPL::Log::LogSystemSingleton::Instance().SetTag("WRT"); + LogDebug("Initialize"); + if (!checkPaths()) { + LogError("Required path does not exist"); + return false; + } + Try + { + GlobalContext::TouchArchitecture(); + + ADD_PROFILING_POINT("attach databases", "start"); + MainThreadSingleton::Instance().AttachDatabases(); + ADD_PROFILING_POINT("attach databases", "stop"); + + ADD_PROFILING_POINT("xml_parser_init", "start"); + xmlInitParser(); + ADD_PROFILING_POINT("xml_parser_init", "stop"); + + // Initialize popup manager + ADD_PROFILING_POINT("popup_manager_init", "start"); + DPL::Popup::PopupManagerSingleton::Instance().Initialize( + DPL::Popup::PopupRendererPtr(new DPL::Popup::PopupRenderer)); + ADD_PROFILING_POINT("popup_manager_init", "stop"); + + // Initialize Language Subtag registry + ADD_PROFILING_POINT("language_rst_init", "start"); + LocalizationSetting::Initialize(); + ADD_PROFILING_POINT("language_rst_init", "stop"); + + + // Needed settings for WKContext are located here + // create Ewk_Context + Ewk_Context* newEwkContext = + ewk_context_new_with_injected_bundle_path(bundlePath); + if (!newEwkContext) { + LogError("Failed to create Ewk_Context"); + ThrowMsg(DPL::Exception, "Failed to create ewk context"); + } + // cache model setting + ewk_context_cache_model_set(newEwkContext, + EWK_CACHE_MODEL_PRIMARY_WEBBROWSER); + m_ewkContext = newEwkContext; + + LogDebug("Initialize finished"); + } catch (const DPL::Exception& ex) { + LogError("Internal Error during screen preparation:"); + DPL::Exception::DisplayKnownException(ex); + /* TODO: + * Do deinitialization: check on which step exception occured + * and deinitialize only initialized parts. + */ + return false; + } + m_initialized = true; + } + return true; + } + + void Terminate() { - GlobalContext::TouchArchitecture(); - - ADD_PROFILING_POINT("attach databases", "start"); - MainThreadSingleton::Instance().AttachDatabases(); - ADD_PROFILING_POINT("attach databases", "stop"); - - ADD_PROFILING_POINT("xml_parser_init", "start"); - xmlInitParser(); - ADD_PROFILING_POINT("xml_parser_init", "stop"); - - // Initialize popup manager - ADD_PROFILING_POINT("popup_manager_init", "start"); - DPL::Popup::PopupManagerSingleton::Instance().Initialize( - DPL::Popup::PopupRendererPtr(new DPL::Popup::PopupRenderer)); - ADD_PROFILING_POINT("popup_manager_init", "stop"); - - // Initialize Language Subtag registry - ADD_PROFILING_POINT("language_rst_init", "start"); - LocalizationSetting::Initialize(); - ADD_PROFILING_POINT("language_rst_init", "stop"); - - LogDebug("Initialize finished"); - } catch (const DPL::Exception& ex) { - LogError("Internal Error during screen preparation:"); - DPL::Exception::DisplayKnownException(ex); - /* TODO: - * Do deinitialization: check on which step exception occured - * and deinitialize only initialized parts. - */ - return false; + if (m_ewkContext) { + LogInfo("finalizeEwkContext called"); + ewk_context_delete(m_ewkContext); + m_ewkContext = 0; + } + MainThreadSingleton::Instance().DetachDatabases(); + // Deinitialize popup manager + DPL::Popup::PopupManagerSingleton::Instance().Deinitialize(); + + LogInfo("Cleanup libxml2 global values."); + xmlCleanupParser(); + m_initialized = false; } - return true; + + RunnableWidgetObjectPtr getRunnableWidgetObject(const WidgetHandle& handle) + { + RunnableWidgetObjectPtr runnable; + WidgetModelPtr model = Domain::deserializeWidgetModel(handle); + if (!!model) { + runnable.reset(new RunnableWidgetObject(model, m_ewkContext)); + } + return runnable; + } + +private: + bool m_initialized; + Ewk_Context* m_ewkContext; +}; + +CoreModule::CoreModule() : m_impl(new CoreModuleImpl()) +{ } -void Terminate() +CoreModule::~CoreModule() { - MainThreadSingleton::Instance().DetachDatabases(); - // Deinitialize popup manager - DPL::Popup::PopupManagerSingleton::Instance().Deinitialize(); +} - LogInfo("Cleanup libxml2 global values."); - xmlCleanupParser(); +bool CoreModule::Init() +{ + return m_impl->Init(); } -RunnableWidgetObjectPtr getRunnableWidgetObject( - const WidgetHandle& handle) +void CoreModule::Terminate() { - RunnableWidgetObjectPtr runnable; - WidgetModelPtr model = Domain::deserializeWidgetModel(handle); - if (!!model) { - runnable.reset(new RunnableWidgetObject(model)); - } - return runnable; + return m_impl->Terminate(); +} + +RunnableWidgetObjectPtr CoreModule::getRunnableWidgetObject(const WidgetHandle& handle) +{ + return m_impl->getRunnableWidgetObject(handle); } -RunnableWidgetObjectPtr getRunnableWidgetObject(const std::string& packageName) +RunnableWidgetObjectPtr CoreModule::getRunnableWidgetObject(const std::string& packageName) { DPL::OptionalString pkgName(DPL::FromUTF8String(packageName)); try { - return CoreModule::getRunnableWidgetObject( + return m_impl->getRunnableWidgetObject( WrtDB::WidgetDAOReadOnly::getHandle(pkgName)); } catch (WrtDB::WidgetDAOReadOnly::Exception::WidgetNotExist) { LogDebug("Widget not found."); @@ -170,6 +240,4 @@ RunnableWidgetObjectPtr getRunnableWidgetObject(const std::string& packageName) } } -} //namespace CoreModule - } /* namespace WRT */ diff --git a/src/api_new/core_module.h b/src/api_new/core_module.h index 0f24d92..28fd94f 100644 --- a/src/api_new/core_module.h +++ b/src/api_new/core_module.h @@ -16,6 +16,7 @@ /** * @file core_module.cpp * @author Przemyslaw Ciezkowski (p.ciezkowski@samsung.com) + * @authir Andrzej Surdej (a.surdej@gmail.com) * @version 1.0 * @brief File contains declarations of wrt core module. */ @@ -25,10 +26,16 @@ #include #include "i_runnable_widget_object.h" +#include +#include namespace WRT { -namespace CoreModule { +class CoreModuleImpl; // forward declaration + +class CoreModule +{ + public: /** * Initialize needed by WRT components (database etc). * Will not throw exception. elm_init() is NOT called in this function. @@ -58,7 +65,15 @@ namespace CoreModule { */ RunnableWidgetObjectPtr getRunnableWidgetObject( const std::string& packageName); -} //namespace CoreModule + private: + CoreModule(); + ~CoreModule(); + std::unique_ptr m_impl; + + friend class DPL::Singleton; +}; + +typedef DPL::Singleton CoreModuleSingleton; } /* namespace WRT */ #endif /* CORE_MODULE_H_ */ diff --git a/src/api_new/i_runnable_widget_object.h b/src/api_new/i_runnable_widget_object.h index cb247d9..f725565 100644 --- a/src/api_new/i_runnable_widget_object.h +++ b/src/api_new/i_runnable_widget_object.h @@ -26,14 +26,11 @@ #include #include #include +#include +#include namespace WRT { - -typedef void (*FinishedCallbackFunction)(bool success, void *userData); -struct FinishedCallback { - FinishedCallbackFunction callback; - void* userData; -}; +typedef std::shared_ptr WidgetModelPtr; class IRunnableWidgetObject { public: @@ -51,18 +48,11 @@ public: */ virtual void PrepareView(Evas_Object *buffer = NULL) = 0; /** - * Sets debug mode on/off. When it is on, RT signal is send - * to wrt-launcher for given pid. - * @param debugMode - * @param sdkLauncherPid - */ - virtual void SetDebugMode(bool debugMode, int sdkLauncherPid) = 0; - /** * Shows widget asynchronously. Callback will be called when * webkit generates website. * @param callback */ - virtual void Show(FinishedCallback callback) = 0; + virtual void Show(WidgetLaunchStruct launchStruct) = 0; /** * Hides widget. To show it again Reset must be called. */ @@ -81,6 +71,11 @@ public: * Resets widgets after calling Hide(). */ virtual void Reset() = 0; + /** + * Retrieve widget's model + * @return WidgetModelPtr + */ + virtual WidgetModelPtr GetModel() = 0; }; typedef std::shared_ptr RunnableWidgetObjectPtr; diff --git a/src/api_new/runnable_widget_object.cpp b/src/api_new/runnable_widget_object.cpp index d371425..fa17046 100644 --- a/src/api_new/runnable_widget_object.cpp +++ b/src/api_new/runnable_widget_object.cpp @@ -21,7 +21,6 @@ */ #include "runnable_widget_object.h" -#include #include #include #include "global_logic.h" @@ -35,6 +34,7 @@ #include #include #include +#include "webkit/bundles/plugin_module_support.h" namespace { //Anonymous @@ -80,18 +80,14 @@ const std::string INVALID_LOCALE = _("IDS_IM_POP_INVALID_WIDGET_LOCALE"); const std::string STILL_AUTHORIZING = _("IDS_IM_POP_AUTHORIZING_ING_ATNT"); const unsigned int UID_ROOT = 0; -struct LaunchCallbackData { - WRT::FinishedCallback callback; - SDKDebugData* debugData; - WRT::RunnableWidgetObject* widgetObject; -}; } // namespace anonymous namespace WRT { -RunnableWidgetObject::RunnableWidgetObject(WidgetModelPtr &model) : - m_widgetModel(model), m_debugMode(false), m_sdkLauncherPid(0) { +RunnableWidgetObject::RunnableWidgetObject(WidgetModelPtr &model, Ewk_Context* context) : + m_widgetModel(model), + m_ewkContext(context) { // If current uid is 'root', change privilege to apps if (UID_ROOT == getuid()) { // Set privilege by pkgname @@ -113,28 +109,11 @@ bool RunnableWidgetObject::CheckBeforeLaunch() set_process_config(DPL::ToUTF8String(widgetModel->PkgName.Get()).c_str()); #endif - // WAC Waikiki Beta Release Core Specification: Widget Runtime - // 10 Dec 2010 - // - // WR-4710 The WRT MUST enable debug functions only for WAC test widgets - // i.e. the functions must not be usable for normal WAC widgets, even when - // a WAC test widget is executing. - ADD_PROFILING_POINT("DeveloperModeCheck", "start"); - - if (!CheckWACTestCertififedWidget()) - { - return false; - } - ADD_PROFILING_POINT("DeveloperModeCheck", "stop"); - if (m_widgetModel->StartURL.Get().IsNull()) { LogWarning("Widget is invalid in currently selected locales"); return false; } - // Widget is not running, localized data can be updated - LocalizeWidgetModel(); - // Inform view controller about new widget model displaying ADD_PROFILING_POINT("OCSPCheck", "start"); @@ -176,92 +155,40 @@ void RunnableWidgetObject::PrepareView(Evas_Object *buffer) ADD_PROFILING_POINT("view_logic_init", "start"); m_view = ViewModule::getView(); - WrtDB::WidgetDAOReadOnly dao(m_widgetModel->Handle.Get()); - DPL::OptionalString img_path(dao.getSplashImgSrc()); - if (!img_path.IsNull()) { - m_windowData->setSplashImagePath((DPL::ToUTF8String(*img_path)).c_str()); + m_splashScreen.reset(new ViewModule::SplashScreenSupport(m_windowData->m_win)); + if (m_splashScreen->createSplashScreen(m_widgetModel->Handle.Get())) { + m_splashScreen->startSplashScreen(); + + // TODO get rid of conformant and splash image + m_view->createWebView( + m_ewkContext, + m_windowData->m_win, + m_windowData->m_conformant, + DPL::MakeDelegate( + m_splashScreen.get(), + &ViewModule::SplashScreenSupport::stopSplashScreen) + ); + } else { + m_view->createWebView(m_ewkContext, + m_windowData->m_win, + m_windowData->m_conformant); } - - m_view->createWebView(m_windowData->m_win, - m_windowData->m_conformant, - m_windowData->m_splashImage); evas_object_show(m_windowData->m_win); initializeWindowModes(); } else { LogDebug("Buffer is not null, passing to view"); m_view = ViewModule::getView(); - m_view->createWebView(buffer, NULL, NULL); + m_view->createWebView(m_ewkContext, buffer, NULL, NULL); } m_view->initialize(); m_view->prepareView(m_widgetModel.get()); ADD_PROFILING_POINT("view_logic_init", "stop"); } -void RunnableWidgetObject::SetDebugMode(bool debugMode, int sdkLauncherPid) -{ - m_debugMode = debugMode; - m_sdkLauncherPid = sdkLauncherPid; -} - -void RunnableWidgetObject::LaunchWidgetCallback(WidgetHandle widgetHandle, - CommonError::Type result, - const std::string& errorMsg, - UserParam userParam) { - LogDebug("Calling callback"); - LaunchCallbackData* launch = - static_cast(userParam); - - if (result == CommonError::WrtSuccess) { - LogDebug("Launch succesfull"); - launch->callback.callback(true, launch->callback.userData); - } else { - LogError("Launch unsuccesfull: " << errorMsg); - launch->callback.callback(false, launch->callback.userData); - } - - if(launch->debugData->debugMode == true) - { - LogDebug("Send RT signal to wrt-launcher(pid: " - << launch->widgetObject->m_sdkLauncherPid << ", result: " - << result); - union sigval sv; - // send real time signal with result to wrt-launcher - if(result == CommonError::WrtSuccess) - { - LogDebug("userData->portnum : " << launch->debugData->portnum); - sv.sival_int = launch->debugData->portnum; - } - else - { - sv.sival_int = -1; - } - sigqueue(launch->widgetObject->m_sdkLauncherPid, SIGRTMIN, sv); - } - - LogDebug("Cleaning RunnableWidgetObject launch resources..."); - - delete launch->debugData->pid; - delete launch->debugData; - delete launch; -} - -void RunnableWidgetObject::Show(FinishedCallback callback) +void RunnableWidgetObject::Show(WidgetLaunchStruct launchStruct) { - SDKDebugData* debugData = new SDKDebugData; - debugData->debugMode = m_debugMode; - debugData->pid = new unsigned long(getpid()); - LaunchCallbackData* userData = new LaunchCallbackData(); - userData->debugData = debugData; - userData->callback = callback; - userData->widgetObject = this; - WidgetLaunchStruct launch( - userData->debugData->pid, - &LaunchWidgetCallback, - userData, - userData->debugData, - ""); connectElmCallback(); - m_view->setLaunchFinishedCallback(launch); + m_view->setLaunchFinishedCallback(launchStruct); m_view->showWidget(); if (m_windowData) { m_windowData->emitSignalForUserLayout(EDJE_SHOW_BACKWARD_SIGNAL, ""); @@ -316,46 +243,9 @@ void RunnableWidgetObject::Reset() } } -bool RunnableWidgetObject::CheckWACTestCertififedWidget() -{ - Assert(!!m_widgetModel); - // WAC test widget - // A widget signed with a WAC-issued test certificate as described in - // Developer Mode. - - bool developerWidget = m_widgetModel->IsTestWidget.Get(); - bool developerMode = - GlobalLogicSingleton::Instance().GetGlobalModel()->DeveloperMode.Get(); - - LogDebug("Is WAC test widget: " << developerWidget); - LogDebug("Is developer Mode: " << developerMode); - - if (developerWidget) { - if(!developerMode) - { - LogError("WAC test certified developer widget is needed for " << - "developer mode"); - return false; - }else{ - //TODO: WR-4660 (show popup about developer widget - // during launch - LogInfo("POPUP: THIS IS TEST WIDGET!"); - } - } - return true; -} - -void RunnableWidgetObject::LocalizeWidgetModel() { - Domain::localizeWidgetModel(m_widgetModel); - m_widgetModel->RunningName.Set(m_widgetModel->Name.Get()); - m_widgetModel->RunningIcon.Set(m_widgetModel->Icon.Get()); - m_widgetModel->RunningStartURL.Set(m_widgetModel->StartURL.Get()); - m_widgetModel->RunningShortName.Set(m_widgetModel->ShortName.Get()); - m_widgetModel->RunningDescription.Set(m_widgetModel->Description.Get()); - m_widgetModel->RunningLicense.Set(m_widgetModel->License.Get()); - m_widgetModel->RunningLicenseHref.Set(m_widgetModel->LicenseHref.Get()); - m_widgetModel->RunningStartFileInfo.Set( - m_widgetModel->StartFileInfo.Get()); +WidgetModelPtr RunnableWidgetObject::GetModel() { + Assert(m_widgetModel); + return m_widgetModel; } void RunnableWidgetObject::initializeWindowModes() @@ -438,9 +328,7 @@ void RunnableWidgetObject::connectElmCallback() RunnableWidgetObject::~RunnableWidgetObject() { LogDebug(""); - if (m_view) { - m_view->destroyWebView(); - } + PluginModuleSupport::shutdown(m_ewkContext); } } /* namespace WRT */ diff --git a/src/api_new/runnable_widget_object.h b/src/api_new/runnable_widget_object.h index 00e481a..7df7828 100644 --- a/src/api_new/runnable_widget_object.h +++ b/src/api_new/runnable_widget_object.h @@ -30,24 +30,26 @@ #include #include #include +#include + +#include class WindowData; namespace WRT { -typedef std::shared_ptr WidgetModelPtr; class RunnableWidgetObject : public IRunnableWidgetObject { public: - RunnableWidgetObject(WidgetModelPtr &model); + RunnableWidgetObject(WidgetModelPtr &model, Ewk_Context* context); bool CheckBeforeLaunch(); void PrepareView(Evas_Object *buffer = NULL); - void SetDebugMode(bool debugMode, int sdkLauncherPid); - void Show(FinishedCallback callback); //asynchronous function + void Show(WidgetLaunchStruct launchStruct); //asynchronous function void Hide(); void Suspend(); void Resume(); void Reset(); + WidgetModelPtr GetModel(); virtual ~RunnableWidgetObject(); private: static void LaunchWidgetCallback(WidgetHandle widgetHandle, @@ -64,13 +66,11 @@ private: void connectElmCallback(); WidgetModelPtr m_widgetModel; - bool checkWACTestCertififedWidget(); void localizeWidgetModel(); ViewModule::IViewModulePtr m_view; + Ewk_Context* m_ewkContext; std::unique_ptr m_windowData; - bool m_debugMode; - int m_sdkLauncherPid; - + std::unique_ptr m_splashScreen; }; } /* namespace WRT */ diff --git a/src/view/common/CMakeLists.txt b/src/view/common/CMakeLists.txt index 203142b..3deba78 100644 --- a/src/view/common/CMakeLists.txt +++ b/src/view/common/CMakeLists.txt @@ -20,11 +20,13 @@ SET(TARGET_VIEW_COMMON_LIB_STATIC "wrt-view-common") PKG_CHECK_MODULES(VIEW_COMMON_DEP appsvc - aul + capi-appfw-app-manager capi-system-haptic + capi-web-url-download dpl-efl dpl-event-efl eina + elementary evas libcurl # uri unescape libiri @@ -35,6 +37,7 @@ PKG_CHECK_MODULES(VIEW_COMMON_DEP ui-gadget-1 vcore wrt-commons-auto-save-dao-rw + dpl-wrt-dao-ro wrt-security ace-client REQUIRED @@ -52,6 +55,7 @@ SET(VIEW_COMMON_SOURCES ${PROJECT_SOURCE_DIR}/src/view/common/view_logic_apps_support.cpp ${PROJECT_SOURCE_DIR}/src/view/common/view_logic_custom_header_support.cpp ${PROJECT_SOURCE_DIR}/src/view/common/view_logic_security_support.cpp + ${PROJECT_SOURCE_DIR}/src/view/common/view_logic_splash_screen_support.cpp ${PROJECT_SOURCE_DIR}/src/view/common/view_logic_debugger_support.cpp ${PROJECT_SOURCE_DIR}/src/view/common/view_logic_geolocation_support.cpp ${PROJECT_SOURCE_DIR}/src/view/common/view_logic_password_support.cpp diff --git a/src/view/common/application_launcher.cpp b/src/view/common/application_launcher.cpp index 3251bb0..af6c11b 100644 --- a/src/view/common/application_launcher.cpp +++ b/src/view/common/application_launcher.cpp @@ -21,7 +21,9 @@ */ #include "application_launcher.h" -#include +#include +#include +#include #include #include #include @@ -31,8 +33,8 @@ IMPLEMENT_SINGLETON(ApplicationLauncher) using namespace WrtDB; namespace { -const char * const BUNDLE_PATH = "path"; -const char * const BUNDLE_COOKIE = "cookie"; +const char * const SERVICE_EXTRA_DATA_KEY_PATH = "path"; +const char * const SERVICE_EXTRA_DATA_KEY_COOKIE = "cookie"; const char * const SCHEME_TYPE_YOUTUBE = "vnd.youtube"; const char * const SCHEME_TYPE_RTSP = "rtsp"; @@ -78,40 +80,72 @@ void ApplicationLauncher::OnEventReceived( return; } - bundle* bundle = bundle_create(); + service_h serviceHandle = NULL; + int ret = SERVICE_ERROR_NONE; - if (NULL == bundle) { - LogError("Fail to create bundle"); + // create service + ret = service_create(&serviceHandle); + if (SERVICE_ERROR_NONE != ret && NULL == serviceHandle) { + LogError("Fail to create service"); return; } - if (appsvc_set_uri(bundle, url.c_str())) { - LogError("Fail to add bundle for path"); - bundle_free(bundle); + + // set service operation + ret = service_set_operation(serviceHandle, SERVICE_OPERATION_DOWNLOAD); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to set operation [" << ret << "]"); + service_destroy(serviceHandle); + return; + } + + // set service uri + ret = service_set_uri(serviceHandle, url.c_str()); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to set uri [" << ret << "]"); + service_destroy(serviceHandle); return; } + + // set cookie if (cookie != "null") { - if (bundle_add(bundle, BUNDLE_COOKIE, cookie.c_str())) { - LogError("Fail to add bundle for cookie"); - bundle_free(bundle); + ret = service_add_extra_data(serviceHandle, + SERVICE_EXTRA_DATA_KEY_COOKIE, + cookie.c_str()); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to add cookie [" << ret << "]"); + service_destroy(serviceHandle); return; } } - if (aul_launch_app(PKG_NAME_DOWNLOAD_PROVIDER.c_str(), bundle) < 0) { - LogError("aul_launch_app is failed"); + + //launch service + ret = service_send_launch_request(serviceHandle, NULL, NULL); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to launch service [" << ret << "]"); + service_destroy(serviceHandle); + return; } - bundle_free(bundle); + + LogDebug("Success launch " << SERVICE_OPERATION_DOWNLOAD); + service_destroy(serviceHandle); + return; } else if (PKG_NAME_VIDEO_PLAYER == pkgName) { - if (aul_app_is_running(PKG_NAME_VT_MAIN.c_str())) + bool isRunning = false; + if (APP_MANAGER_ERROR_NONE != + app_manager_is_running(PKG_NAME_VT_MAIN.c_str(), &isRunning)) { - LogError("video-call is running......"); + LogError("Fail to get app running information"); + return; + } + if (true == isRunning) { + LogError("video-call is running"); return; } std::string scheme(event.GetArg1()); std::string uri(event.GetArg2()); std::string cookie(event.GetArg3()); - const char* videoPath; - int aulRVal = AUL_R_ERROR; + const char* url; if ("null" == scheme) { LogError("scheme is empty"); @@ -125,55 +159,75 @@ void ApplicationLauncher::OnEventReceived( LogDebug("scheme: " << scheme); if (SCHEME_TYPE_YOUTUBE == scheme) { YouTubeHD *youtube = new YouTubeHD(m_widgetHandle); - videoPath = youtube->getYouTubeHD(uri.c_str()); + url = youtube->getYouTubeHD(uri.c_str()); delete youtube; } else if (SCHEME_TYPE_RTSP == scheme || (SCHEME_TYPE_HTML5_VIDEO == scheme)) { - videoPath = uri.c_str(); + url = uri.c_str(); } else { LogError("scheme is invalid!!"); return; } - bundle *bundle = bundle_create(); - if (bundle == NULL) { - LogError("Fail to create bundle"); - bundle_free(bundle); + service_h serviceHandle = NULL; + int ret = SERVICE_ERROR_NONE; + + // create service + ret = service_create(&serviceHandle); + if (SERVICE_ERROR_NONE != ret && NULL == serviceHandle) { + LogError("Fail to create service"); return; } - if (! videoPath || strlen(videoPath)==0) { - LogError("getYouTubeHD is FAILED!!"); - bundle_free(bundle); + // set url + if (!url || strlen(url) == 0) { + LogError("Fail to get url"); + service_destroy(serviceHandle); return; } - LogDebug("videoPath: " << videoPath); - if (bundle_add(bundle, BUNDLE_PATH, videoPath) < 0) { - LogError("bundle_add is FAIL!!"); - bundle_free(bundle); + ret = service_add_extra_data(serviceHandle, + SERVICE_EXTRA_DATA_KEY_PATH, + url); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to set url [" << ret << "]"); + service_destroy(serviceHandle); return; } + // set cookie if (SCHEME_TYPE_HTML5_VIDEO == scheme) { if ("null" != cookie) { - LogDebug("cookie: " << cookie); - if (bundle_add(bundle, BUNDLE_COOKIE, cookie.c_str()) < 0) { - LogError("cookie is empty"); - bundle_free(bundle); + ret = service_add_extra_data(serviceHandle, + SERVICE_EXTRA_DATA_KEY_COOKIE, + cookie.c_str()); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to add cookie [" << ret << "]"); + service_destroy(serviceHandle); return; } } } - aulRVal = aul_launch_app(PKG_NAME_VIDEO_PLAYER.c_str(), bundle); - if (AUL_R_OK > aulRVal) { - LogError("aul_launch_app is failed! aulRVal: " << aulRVal); + // set package + ret = service_set_package(serviceHandle, PKG_NAME_VIDEO_PLAYER.c_str()); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to set package [" << ret << "]"); + service_destroy(serviceHandle); + return; } - if (bundle_free(bundle)) { - LogDebug("bundle_free is FAILED!!"); + + //launch service + ret = service_send_launch_request(serviceHandle, NULL, NULL); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to launch service [" << ret << "]"); + service_destroy(serviceHandle); + return; } + LogDebug("Success launch " << PKG_NAME_VIDEO_PLAYER); + service_destroy(serviceHandle); + return; } } diff --git a/src/view/common/view_logic_apps_support.cpp b/src/view/common/view_logic_apps_support.cpp index 740e27c..c828adc 100644 --- a/src/view/common/view_logic_apps_support.cpp +++ b/src/view/common/view_logic_apps_support.cpp @@ -109,6 +109,16 @@ class AppsSupportImplementation appsvc_set_operation(args, APPSVC_OPERATION_VIEW); appsvc_set_mime(args, mimeType.c_str()); appsvc_set_uri(args, uri.c_str()); + } else if (!strcasecmp(mimeType.c_str(), "video/mp4") || + !strcasecmp(mimeType.c_str(), "vidoe/3gp")) + { + CONTROLLER_POST_EVENT( + ApplicationLauncher, + ApplicationLauncherEvents::LaunchApplicationByPkgname( + ApplicationLauncherPkgname::PKG_NAME_VIDEO_PLAYER, + SCHEME_TYPE_HTML5_VIDEO, + uri, + "null")); } else { LogInfo("Not Supported MIME type in WRT"); return false; diff --git a/src/view/common/window_data.cpp b/src/view/common/window_data.cpp index 25b1b46..b82345b 100755 --- a/src/view/common/window_data.cpp +++ b/src/view/common/window_data.cpp @@ -82,7 +82,6 @@ void WindowData::init() m_conformant = createConformant(m_user_layout); evas_object_show(m_conformant); m_progress = createProgress(m_user_layout); - m_splashImage = createSplashImage(m_user_layout); result = ug_init( static_cast(ecore_x_display_get()), @@ -106,24 +105,6 @@ void WindowData::unsetEvasObjectForLayout() elm_object_content_unset(m_conformant); } -void WindowData::setSplashImagePath(const char * image_path) -{ - if (image_path) { - LogInfo("splash screen image path : " << image_path); - - if (elm_icon_file_set(m_splashImage, image_path, NULL)) { - if (elm_icon_animated_available_get(m_splashImage)) { - elm_icon_animated_set(m_splashImage, EINA_TRUE); - elm_icon_animated_play_set(m_splashImage, EINA_FALSE); - } else { - elm_icon_animated_set(m_splashImage, EINA_FALSE); - } - } else { - LogError("loading splash image has been failed"); - } - } -} - void WindowData::loadingOn() { LogInfo("loadingOn"); @@ -364,21 +345,6 @@ void WindowData::alignProgressPosition() evas_object_move(m_progress, alignedX, alignedY); } -Evas_Object* WindowData::createSplashImage(Evas_Object* parent) -{ - Assert(parent != NULL && "Parent for splash image is null"); - - Evas_Coord x, y, w, h; - evas_object_geometry_get(m_win, &x, &y, &w, &h); - - Evas_Object* splashImage = elm_icon_add(parent); - - evas_object_resize(splashImage, w, h); - evas_object_image_fill_set(splashImage, 0, 0, w, h); - - return splashImage; -} - void WindowData::addNaviBackButtonCallback( const char* event, CallbackType callback, diff --git a/src/view/common/window_data.h b/src/view/common/window_data.h index 0d62499..61af80c 100755 --- a/src/view/common/window_data.h +++ b/src/view/common/window_data.h @@ -63,7 +63,6 @@ class WindowData : private DPL::Noncopyable public: Evas_Object* m_win; Evas_Object* m_conformant; - Evas_Object* m_splashImage; explicit WindowData(unsigned long pid, bool manualInit=false); virtual ~WindowData(); @@ -71,7 +70,6 @@ class WindowData : private DPL::Noncopyable void init(); void setEvasObjectForLayout(Evas_Object* evas_object); void unsetEvasObjectForLayout(); - void setSplashImagePath(const char * image_path); void loadingOn(); void loadingOff(); void moveProgress(); @@ -119,7 +117,6 @@ class WindowData : private DPL::Noncopyable Evas_Object* createUserLayout(Evas_Object* parent); Evas_Object* createConformant(Evas_Object* parent); Evas_Object* createProgress(Evas_Object* parent); - Evas_Object* createSplashImage(Evas_Object* parent); void alignProgressPosition(); void createTitle(const char* data); void removeTitle(); diff --git a/src/view/i_view_module.h b/src/view/i_view_module.h index 3899b89..08a0b7d 100644 --- a/src/view/i_view_module.h +++ b/src/view/i_view_module.h @@ -22,7 +22,9 @@ #include #include +#include #include +#include #ifndef WRT_SRC_VIEW_I_VIEW_MODULE_H_ #define WRT_SRC_VIEW_I_VIEW_MODULE_H_ @@ -32,8 +34,9 @@ class WidgetModel; //FORWARD DECLARATION struct WidgetLaunchStruct; //FORWARD DECLARATION struct OperationStatusStruct; //FORWARD DECLARATION struct InitScreenStruct; //FORWARD DECLARATION -namespace ViewModule -{ +namespace ViewModule { + +typedef DPL::FastDelegate0 ProgresFinishedCallback; /** \brief Interface to ViewModule. Object of IViewModule type is returned from * ViewModuleMgr factory. @@ -41,9 +44,10 @@ namespace ViewModule class IViewModule { public: - virtual void createWebView(Evas_Object* window, + virtual void createWebView(Ewk_Context* context, + Evas_Object* window, Evas_Object* conformant = NULL, - Evas_Object* splashImage = NULL) = 0; + ProgresFinishedCallback cb = NULL) = 0; virtual void destroyWebView() = 0; virtual void initialize() = 0; virtual void terminate() = 0; diff --git a/src/view/webkit/view_logic.cpp b/src/view/webkit/view_logic.cpp index 8ad207e..2abe235 100644 --- a/src/view/webkit/view_logic.cpp +++ b/src/view/webkit/view_logic.cpp @@ -102,22 +102,14 @@ const char * const EWK_VIBRATION_CANCEL = "vibration,cancel"; } -void ViewLogic::createWebView(Evas_Object* window, +void ViewLogic::createWebView(Ewk_Context* context, + Evas_Object* window, Evas_Object* conformant, - Evas_Object* splashImage) + ViewModule::ProgresFinishedCallback cb) { LogDebug(""); - m_splashImage = splashImage; - if (m_splashImage) { - LogInfo("splashImageOn"); - if (elm_icon_animated_get(m_splashImage) == EINA_TRUE) { - elm_icon_animated_play_set(m_splashImage, EINA_TRUE); - } - evas_object_show(m_splashImage); - - } - - initializeEwkContext(); + m_finishedCallback = cb; + initializeEwkContext(context); Assert(NULL != m_ewkContext); Assert(window); m_window = window; @@ -246,7 +238,6 @@ void ViewLogic::hideWidget() // evas_object_del(*it); //} m_ewkViewList.clear(); - PluginModuleSupport::shutdown(m_ewkContext); } void ViewLogic::suspendWidget( @@ -384,28 +375,16 @@ void ViewLogic::goBack() } } -void ViewLogic::initializeEwkContext(void) +void ViewLogic::initializeEwkContext(Ewk_Context* newEwkContext) { LogInfo("initializeEwkContext called"); - // Needed settings for WKContext are located here - // create Ewk_Context - Ewk_Context* newEwkContext = - ewk_context_new_with_injected_bundle_path(bundlePath); - if (!newEwkContext) { - LogError("Failed to create Ewk_Context"); - Assert(false); - } - + Assert(newEwkContext && "Ewk_Context provided can not be null"); // bundle callback setting ewk_context_message_from_injected_bundle_callback_set( newEwkContext, contextMessageFromInjectedBundleCallback, static_cast(this)); - // cache model setting - ewk_context_cache_model_set(newEwkContext, - EWK_CACHE_MODEL_PRIMARY_WEBBROWSER); - // proxy server setting char *proxyAddress = vconf_get_str(VCONFKEY_NETWORK_PROXY); if ((!proxyAddress) || (strlen(proxyAddress) == 0) @@ -473,8 +452,7 @@ ViewLogic::ViewLogic(): m_appsSupport(new ViewModule::AppsSupport()), m_vibrationSupport(new ViewModule::VibrationSupport()), m_window(NULL), - m_conformant(NULL), - m_splashImage(NULL) + m_conformant(NULL) { } @@ -1204,16 +1182,9 @@ void ViewLogic::didFinishProgressCallback(WKPageRef /*page*/, const void* clientinfo) { LogDebug("didFinishProgressCallback"); - Assert(clientinfo); - ViewLogic* This = static_cast(const_cast(clientinfo)); - - if (This->m_splashImage) { - LogInfo("splashImageOff"); - if (elm_icon_animated_get(This->m_splashImage) == EINA_TRUE) { - elm_icon_animated_play_set(This->m_splashImage, EINA_FALSE); - } - evas_object_hide(This->m_splashImage); - } + ViewLogic const * const view = static_cast(clientinfo); + if (!view->m_finishedCallback.empty()) + view->m_finishedCallback(); } void ViewLogic::createWindowCallback( @@ -1610,7 +1581,7 @@ Eina_Bool ViewLogic::orientationLockCallback( } else if(orientation & EWK_SCREEN_ORIENTATION_PORTRAIT_SECONDARY) { LogDebug("orientation is portrait-secondary"); elm_win_rotation_with_resize_set(This->m_window, 180); - ewk_view_orientation_send(obj, -180); + ewk_view_orientation_send(obj, 180); } else if(orientation & EWK_SCREEN_ORIENTATION_LANDSCAPE_SECONDARY) { LogDebug("orientation is landscape-secondary"); elm_win_rotation_with_resize_set(This->m_window, 90); diff --git a/src/view/webkit/view_logic.h b/src/view/webkit/view_logic.h index 2aec278..3e3d373 100644 --- a/src/view/webkit/view_logic.h +++ b/src/view/webkit/view_logic.h @@ -43,9 +43,10 @@ class SchemeSupport; class ViewLogic : public ViewModule::IViewModule { public: - void createWebView(Evas_Object* window, + void createWebView(Ewk_Context* context, + Evas_Object* window, Evas_Object* conformant = NULL, - Evas_Object* splashImage = NULL); + ViewModule::ProgresFinishedCallback cb = NULL); void destroyWebView(); void initialize(); void terminate(); @@ -59,7 +60,7 @@ class ViewLogic : public ViewModule::IViewModule void goBack(); // Ewk_Context operations - void initializeEwkContext(void); + void initializeEwkContext(Ewk_Context* context); void finalizeEwkContext(); ViewLogic(); virtual ~ViewLogic(); @@ -258,13 +259,14 @@ class ViewLogic : public ViewModule::IViewModule Evas_Object* m_currentEwkView; Evas_Object* m_window; Evas_Object* m_conformant; - Evas_Object* m_splashImage; WidgetModel* m_model; std::string m_currentUri; std::string m_blockedUri; bool m_emptyView; std::string m_theme; + ViewModule::ProgresFinishedCallback m_finishedCallback; + std::unique_ptr m_schemeSupport; std::unique_ptr m_appsSupport; std::unique_ptr m_vibrationSupport; diff --git a/src/wrt-client/wrt-client.cpp b/src/wrt-client/wrt-client.cpp index e84d868..f3b52d5 100644 --- a/src/wrt-client/wrt-client.cpp +++ b/src/wrt-client/wrt-client.cpp @@ -21,6 +21,8 @@ #include #include #include +#include +#include WrtClient::WrtClient(int argc, char **argv) : Application(argc, argv, "wrt-client", false), @@ -224,7 +226,7 @@ void WrtClient::OnEventReceived(const NextStepEvent& /*event*/) void WrtClient::initStep() { LogDebug(""); - if (WRT::CoreModule::Init()) { + if (WRT::CoreModuleSingleton::Instance().Init()) { m_initialized = true; } else { m_returnStatus = ReturnStatus::Failed; @@ -234,9 +236,71 @@ void WrtClient::initStep() NextStepEvent()); } -void WrtClient::LaunchCallback(bool success, void *data) { - WrtClient* wrtClient = static_cast(data); - if (success) { +void WrtClient::localizeWidgetModel() { + Assert(!!m_widget); + WRT::WidgetModelPtr model = m_widget->GetModel(); + Assert(!!model); + Domain::localizeWidgetModel(model); + model->RunningName.Set(model->Name.Get()); + model->RunningIcon.Set(model->Icon.Get()); + model->RunningStartURL.Set(model->StartURL.Get()); + model->RunningShortName.Set(model->ShortName.Get()); + model->RunningDescription.Set(model->Description.Get()); + model->RunningLicense.Set(model->License.Get()); + model->RunningLicenseHref.Set(model->LicenseHref.Get()); + model->RunningStartFileInfo.Set( + model->StartFileInfo.Get()); +} + +bool WrtClient::checkWACTestCertififedWidget() +{ + // WAC Waikiki Beta Release Core Specification: Widget Runtime + // 10 Dec 2010 + // + // WR-4710 The WRT MUST enable debug functions only for WAC test widgets + // i.e. the functions must not be usable for normal WAC widgets, even when + // a WAC test widget is executing. + ADD_PROFILING_POINT("DeveloperModeCheck", "start"); + Assert(!!m_widget); + WRT::WidgetModelPtr model = m_widget->GetModel(); + Assert(!!model); + // WAC test widget + // A widget signed with a WAC-issued test certificate as described in + // Developer Mode. + + bool developerWidget = model->IsTestWidget.Get(); + bool developerMode = + GlobalLogicSingleton::Instance().GetGlobalModel()->DeveloperMode.Get(); + + LogDebug("Is WAC test widget: " << developerWidget); + LogDebug("Is developer Mode: " << developerMode); + + if (developerWidget) { + if(!developerMode) + { + LogError("WAC test certified developer widget is needed for " << + "developer mode"); + return false; + }else{ + //TODO: WR-4660 (show popup about developer widget + // during launch + LogInfo("POPUP: THIS IS TEST WIDGET!"); + } + } + ADD_PROFILING_POINT("DeveloperModeCheck", "stop"); + return true; +} + +void WrtClient::staticWrtLaunchWidgetCallback(int /*handle*/, + CommonError::Type status, + const std::string& errorMsg, + void* userdata) +{ + WrtLaunchData* userData = static_cast(userdata); + WrtClient* wrtClient = static_cast(userData->wrtClientContext); + SDKDebugData* debug = userData->sdkDebugData; + + if (status == CommonError::WrtSuccess) { LogDebug("Launch succesfull"); wrtClient->m_launched = true; @@ -245,7 +309,7 @@ void WrtClient::LaunchCallback(bool success, void *data) { printf("launched\n"); fflush(stdout); } else { - LogError("Launch unsuccesfull"); + LogError("Launch unsuccesfull: " << errorMsg); printf("failed\n"); @@ -254,14 +318,38 @@ void WrtClient::LaunchCallback(bool success, void *data) { wrtClient->DPL::Event::ControllerEventHandler:: PostEvent(NextStepEvent()); } + + if(debug->debugMode) + { + LogDebug("Send RT signal to wrt-launcher(pid: " + << wrtClient->m_sdkLauncherPid << ", status: " << status); + union sigval sv; + /* send real time signal with result to wrt-launcher */ + if(status == CommonError::WrtSuccess) + { + LogDebug("userData->portnum : " << debug->portnum); + sv.sival_int = debug->portnum; + } + else + { + sv.sival_int = -1; + } + sigqueue(wrtClient->m_sdkLauncherPid, SIGRTMIN, sv); + } + ApplicationDataSingleton::Instance().freeBundle(); + + LogDebug("Cleaning wrtClient launch resources..."); + delete debug->pid; + delete debug; + delete userData; } void WrtClient::launchStep() { LogDebug("Launching widget ..."); - m_widget = WRT::CoreModule::getRunnableWidgetObject(m_handle); + m_widget = WRT::CoreModuleSingleton::Instance().getRunnableWidgetObject(m_handle); if (!m_widget) { LogError("RunnableWidgetObject is NULL, stop launchStep"); DPL::Event::ControllerEventHandler::PostEvent( @@ -283,6 +371,15 @@ void WrtClient::launchStep() return; } + // Widget is not running, localized data can be updated + localizeWidgetModel(); + + if (!checkWACTestCertififedWidget()) + { + LogWarning("WAC Certificate failed, stop launchStep"); + return; + } + m_widgetState = WidgetState_Authorizing; if (!m_widget->CheckBeforeLaunch()) { LogError("CheckBeforeLaunch failed, stop launchStep"); @@ -293,11 +390,19 @@ void WrtClient::launchStep() LogInfo("Widget launch accepted. Entering running state"); m_widgetState = WidgetState_Running; m_widget->PrepareView(); - m_widget->SetDebugMode(m_debugMode, m_sdkLauncherPid); - WRT::FinishedCallback callback; - callback.callback = &LaunchCallback; - callback.userData = this; - m_widget->Show(callback); + SDKDebugData* debugData = new SDKDebugData; + debugData->debugMode = m_debugMode; + debugData->pid = new unsigned long(getpid()); + WrtLaunchData* userData = new WrtLaunchData; + userData->wrtClientContext = this; + userData->sdkDebugData = debugData; + WidgetLaunchStruct launch( + debugData->pid, + &staticWrtLaunchWidgetCallback, + userData, + debugData, + ""); + m_widget->Show(launch); } void WrtClient::shutdownStep() @@ -307,7 +412,7 @@ void WrtClient::shutdownStep() m_widgetState = WidgetState_Stopped; m_widget->Hide(); m_widget.reset(); - WRT::CoreModule::Terminate(); + WRT::CoreModuleSingleton::Instance().Terminate(); m_initialized = false; } Quit(); diff --git a/src/wrt-client/wrt-client.h b/src/wrt-client/wrt-client.h index 1994fe4..d3f69ff 100644 --- a/src/wrt-client/wrt-client.h +++ b/src/wrt-client/wrt-client.h @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include "widget_state.h" DECLARE_GENERIC_EVENT_0(NextStepEvent) @@ -63,6 +63,8 @@ class WrtClient : void showHelpAndQuit(); bool checkArgument(); void setSdkLauncherDebugData(); + bool checkWACTestCertififedWidget(); + void localizeWidgetModel(); // Events virtual void OnEventReceived(const NextStepEvent& event); @@ -72,7 +74,10 @@ class WrtClient : void launchStep(); void shutdownStep(); - static void LaunchCallback(bool success, void *data); + static void staticWrtLaunchWidgetCallback(int, + CommonError::Type, + const std::string&, + void*); // Private data int m_handle; bool m_launched; diff --git a/src/wrt-launcher/CMakeLists.txt b/src/wrt-launcher/CMakeLists.txt old mode 100755 new mode 100644 index ee88d0a..5f5d773 --- a/src/wrt-launcher/CMakeLists.txt +++ b/src/wrt-launcher/CMakeLists.txt @@ -20,8 +20,7 @@ SET(LAUNCHER_SRCS ) PKG_CHECK_MODULES(LAUNCHER_PKGS - aul - bundle + capi-appfw-app-manager dpl-efl dpl-db-efl dpl-wrt-dao-rw diff --git a/src/wrt-launcher/wrt-launcher.cpp b/src/wrt-launcher/wrt-launcher.cpp index c26a326..69f3be3 100644 --- a/src/wrt-launcher/wrt-launcher.cpp +++ b/src/wrt-launcher/wrt-launcher.cpp @@ -15,8 +15,8 @@ */ #include #include -#include -#include +#include +#include #include #include #include @@ -38,7 +38,6 @@ #define WEBAPP_DEFAULT_UID 5000 #define WEBAPP_DEFAULT_GID 5000 #define LOGGING_DEFAULT_GID 6509 -#define WRT_CHANGE_CLIENT_SH "wrt_change_client.sh"; #define RETURN_ERROR -1 static const char *program; @@ -72,8 +71,7 @@ typedef struct static void free_widget_info(widget_info* widget_info) { - if(widget_info) - { + if (widget_info) { delete[] widget_info->guid; delete[] widget_info->name; delete[] widget_info->version; @@ -92,8 +90,7 @@ static char* new_strdup(const char *str) static bool display_widget_info() { - if (NULL == g_dbConnection) - { + if (NULL == g_dbConnection) { Try { g_dbConnection.Reset(new DBConnection()); g_dbConnection->AttachDatabase(); @@ -107,13 +104,12 @@ static bool display_widget_info() WidgetHandleList widgetList = WrtDB::WidgetDAOReadOnly::getHandleList(); printf("%3s%12s%32s%16s%64s%32s\n", - "No", "ID", "Name", "Version", "GUID", "Package Name"); + "No", "ID", "Name", "Version", "GUID", "Package Name"); printf("%3s%12s%32s%16s%64s%32s\n", - "--", "--", "----", "-------", "----", "------------"); + "--", "--", "----", "-------", "----", "------------"); int number = 1; - FOREACH(iterator, widgetList) - { + FOREACH(iterator, widgetList) { widget_info *info = new widget_info; memset(info, 0x00, sizeof(widget_info)); @@ -129,37 +125,29 @@ static bool display_widget_info() if (dl.IsNull()) { DPL::String languageTag(L""); localizedInfo = dao.getLocalizedInfo(languageTag); - } - else - { + } else { localizedInfo = dao.getLocalizedInfo(*dl); } widget_name = localizedInfo.name; /*end get WidgetName*/ - - if(!widget_name.IsNull()) - { + if (!widget_name.IsNull()) { info->name = new_strdup(DPL::ToUTF8String(*widget_name).c_str()); } - if(!version.IsNull()) - { + if (!version.IsNull()) { info->version = new_strdup(DPL::ToUTF8String(*version).c_str()); - } - else - { + } else { std::string installedWidgetVersionString; installedWidgetVersionString = ""; info->version = new_strdup(installedWidgetVersionString.c_str()); } - if(!guid.IsNull()) - { - info->guid= new_strdup(DPL::ToUTF8String(*guid).c_str()); + if (!guid.IsNull()) { + info->guid = new_strdup(DPL::ToUTF8String(*guid).c_str()); } - if(!package_name.IsNull()) - { - info->pkg_name= new_strdup(DPL::ToUTF8String(*package_name).c_str()); + if (!package_name.IsNull()) { + info->pkg_name = + new_strdup(DPL::ToUTF8String(*package_name).c_str()); } printf("%3i%12i%32s%16s%64s%32s\n", number++, @@ -172,54 +160,45 @@ static bool display_widget_info() free_widget_info(info); } - return 1; + return 1; } static void print_help(FILE *stream, int /*exit_code*/) { - fprintf(stream, "Usage : %s [ ... ]\n", program); - fprintf(stream, - " -h --help Display this usage information.\n" - " -l --list Display installed widgets handle and name list\n" - " -s [GUID]or[PkgName] --start Launch widget with package name or GUID\n" - " -k [GUID]or[PkgName] --kill Kill widget with package name or GUID\n" - " -d --debug Activate debug mode\n" - " -t [second] --timeout Set timeout of response from widget in debug mode\n" - " -v [1]or[0] --developer-mode Set developermode\n" - " -c [1]or[0] --compliance-mode Set compliancemode\n" - " -i [imei] --fake-imei Set fakeimei\n" - " -m [meid] --fake-meid Set fakemeid\n" - " -w [PkgName] --change-wkmode Change webkit mode\n" - " if you emit this option, 5 seconds is set in debug mode\n" - ); -} - -static int kill_widget(const aul_app_info *info, void *data) -{ - char *pkgname = (char *) data; - if(strcmp(info->pkg_name, pkgname) == 0) - return aul_terminate_pid(info->pid); - else return -1; + fprintf(stream, "Usage : %s [ ... ]\n", program); + fprintf(stream, + " -h --help Display this usage information.\n" + " -l --list Display installed widgets handle and name list\n" + " -s [GUID]or[PkgName] --start Launch widget with package name or GUID\n" + " -k [GUID]or[PkgName] --kill Kill widget with package name or GUID\n" + " -d --debug Activate debug mode\n" + " -t [second] --timeout Set timeout of response from widget in debug mode\n" + " -v [1]or[0] --developer-mode Set developermode\n" + " -c [1]or[0] --compliance-mode Set compliancemode\n" + " -i [imei] --fake-imei Set fakeimei\n" + " -m [meid] --fake-meid Set fakemeid\n" + " if you emit this option, 5 seconds is set in debug mode\n" + ); } static void sighandler(int signo, siginfo_t *si, void *data); int main(int argc, char* argv[]) { - int ret = -1; - bundle *b = NULL; int next_opt, opt_idx = 0; int timeout = TIMEOUT_DEFAULT; - char pkgname[256]=""; - char temp_arg[256]=""; + char pkgname[256] = ""; + char temp_arg[256] = ""; char pid[6] = ""; char op = '\0'; struct sigaction sigact; + service_h serviceHandle = NULL; + int ret = SERVICE_ERROR_NONE; + program = argv[0]; - static struct option long_options[] = - { + static struct option long_options[] = { {"help", no_argument, 0, 'h'}, {"list", no_argument, 0, 'l'}, {"start", required_argument, 0, 's'}, @@ -230,12 +209,10 @@ int main(int argc, char* argv[]) {"compliance-mode", required_argument, 0, 'c'}, {"fake-imei", required_argument, 0, 'i'}, {"fake-meid", required_argument, 0, 'm'}, - {"change-wkmode", required_argument, 0, 'w'}, {0, 0, 0, 0} }; - if(argv[1] == NULL) - { + if (argv[1] == NULL) { /* exit if any argument doesn't exist */ print_help(stdout, 0); return -1; @@ -253,147 +230,145 @@ int main(int argc, char* argv[]) } do { - next_opt = getopt_long(argc, argv,"hls:k:dt:v:c:i:m:w:", long_options, &opt_idx); + next_opt = getopt_long(argc, + argv, + "hls:k:dt:v:c:i:m:", + long_options, + &opt_idx); + + switch (next_opt) { + case 'h': + print_help(stdout, 0); + break; - switch(next_opt) - { - case 'h': - print_help(stdout, 0); - break; + case 'l': + if (!display_widget_info()) { + printf("Fail to display the list of installed widgets"); + return -1; + } + break; - case 'l': - if(!display_widget_info()) - { - printf("Fail to display the list of installed widgets"); - return -1; - } - break; + case 's': + case 'k': + strncpy(temp_arg, optarg, strlen(optarg)); + op = next_opt; + break; - case 's': - case 'k': - strncpy(temp_arg, optarg, strlen(optarg)); - op = next_opt; - break; + case 't': + timeout = atoi(optarg); + if (timeout < 0 ) { + timeout = TIMEOUT_DEFAULT; + } + break; - case 't': - timeout = atoi(optarg); - if(timeout < 0 ) - timeout = TIMEOUT_DEFAULT; - break; + case 'd': + // create service + ret = service_create(&serviceHandle); + if (SERVICE_ERROR_NONE != ret && NULL == serviceHandle) { + LogError("Fail to create service"); + return FALSE; + } - case 'd': - // create bundle data - b = bundle_create(); - bundle_add(b, "debug", "true"); - snprintf(pid, sizeof(pid), "%d", getpid()); - bundle_add(b, "pid", pid); - break; + // set debug mode + ret = service_add_extra_data(serviceHandle, + "debug", + "true"); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to set debug mode [" << ret << "]"); + service_destroy(serviceHandle); + return FALSE; + } + + // set pid + snprintf(pid, sizeof(pid), "%d", getpid()); + ret = service_add_extra_data(serviceHandle, + "pid", + pid); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to set pid [" << ret << "]"); + service_destroy(serviceHandle); + return FALSE; + } + break; - case 'v': - strncpy(temp_arg, optarg, strlen(optarg)); - if (NULL == g_dbConnection) - { - Try { - g_dbConnection.Reset(new DBConnection()); - g_dbConnection->AttachDatabase(); - } - Catch (DPL::DB::SqlConnection::Exception::Base) { - LogDebug("Fail to connect DB"); - return FALSE; - } + case 'v': + strncpy(temp_arg, optarg, strlen(optarg)); + if (NULL == g_dbConnection) { + Try { + g_dbConnection.Reset(new DBConnection()); + g_dbConnection->AttachDatabase(); } - if(!strcmp("1", temp_arg)) - { - WrtDB::GlobalDAO::SetDeveloperMode(true); + Catch (DPL::DB::SqlConnection::Exception::Base) { + LogDebug("Fail to connect DB"); + return FALSE; } - else - { - WrtDB::GlobalDAO::SetDeveloperMode(false); + } + if (!strcmp("1", temp_arg)) { + WrtDB::GlobalDAO::SetDeveloperMode(true); + } else { + WrtDB::GlobalDAO::SetDeveloperMode(false); + } + break; + case 'c': + strncpy(temp_arg, optarg, strlen(optarg)); + if (NULL == g_dbConnection) { + Try { + g_dbConnection.Reset(new DBConnection()); + g_dbConnection->AttachDatabase(); } - break; - case 'c': - strncpy(temp_arg, optarg, strlen(optarg)); - if (NULL == g_dbConnection) - { - Try { - g_dbConnection.Reset(new DBConnection()); - g_dbConnection->AttachDatabase(); - } - Catch (DPL::DB::SqlConnection::Exception::Base) { - LogDebug("Fail to connect DB"); - return FALSE; - } + Catch (DPL::DB::SqlConnection::Exception::Base) { + LogDebug("Fail to connect DB"); + return FALSE; } - if(!strcmp("1", temp_arg)) - { - WrtDB::GlobalDAO::setComplianceMode(true); + } + if(!strcmp("1", temp_arg)) { + WrtDB::GlobalDAO::setComplianceMode(true); + } else { + WrtDB::GlobalDAO::setComplianceMode(false); + } + break; + case 'i': + strncpy(temp_arg, optarg, strlen(optarg)); + if (NULL == g_dbConnection) { + Try { + g_dbConnection.Reset(new DBConnection()); + g_dbConnection->AttachDatabase(); } - else - { - WrtDB::GlobalDAO::setComplianceMode(false); + Catch (DPL::DB::SqlConnection::Exception::Base) { + LogDebug("Fail to connect DB"); + return FALSE; } - break; - case 'i': - strncpy(temp_arg, optarg, strlen(optarg)); - if (NULL == g_dbConnection) - { - Try { - g_dbConnection.Reset(new DBConnection()); - g_dbConnection->AttachDatabase(); - } - Catch (DPL::DB::SqlConnection::Exception::Base) { - LogDebug("Fail to connect DB"); - return FALSE; - } + } + WrtDB::GlobalDAO::setComplianceFakeImei(temp_arg); + break; + case 'm': + strncpy(temp_arg, optarg, strlen(optarg)); + if (NULL == g_dbConnection) { + Try { + g_dbConnection.Reset(new DBConnection()); + g_dbConnection->AttachDatabase(); } - WrtDB::GlobalDAO::setComplianceFakeImei(temp_arg); - break; - case 'm': - strncpy(temp_arg, optarg, strlen(optarg)); - if (NULL == g_dbConnection) - { - Try { - g_dbConnection.Reset(new DBConnection()); - g_dbConnection->AttachDatabase(); - } - Catch (DPL::DB::SqlConnection::Exception::Base) { - LogDebug("Fail to connect DB"); - return FALSE; - } + Catch (DPL::DB::SqlConnection::Exception::Base) { + LogDebug("Fail to connect DB"); + return FALSE; } - WrtDB::GlobalDAO::setComplianceFakeMeid(temp_arg); - break; - - case 'w': - { - strncpy(temp_arg, optarg, strlen(optarg)); - // run mode change script - // wrt_change_client.sh - std::stringstream sstr; - sstr << WRT_CHANGE_CLIENT_SH; - sstr << " "; - sstr << temp_arg; - - std::string scriptCommand = sstr.str(); - system(scriptCommand.c_str()); } + WrtDB::GlobalDAO::setComplianceFakeMeid(temp_arg); break; - case -1: - break; + case -1: + break; - default: - print_help(stdout, 0); - break; + default: + print_help(stdout, 0); + break; } - }while (next_opt != -1); + } while (next_opt != -1); - if((op == 's')||(op == 'k')) - { + if ((op == 's') || (op == 'k')) { const char *temp = NULL; - if (NULL == g_dbConnection) - { + if (NULL == g_dbConnection) { Try { g_dbConnection.Reset(new DBConnection()); g_dbConnection->AttachDatabase(); @@ -405,57 +380,50 @@ int main(int argc, char* argv[]) } WidgetHandleList widgetList = WrtDB::WidgetDAOReadOnly::getHandleList(); - FOREACH(iterator, widgetList) - { + FOREACH(iterator, widgetList) { WrtDB::WidgetDAOReadOnly dao(*iterator); WrtDB::WidgetGUID d_guid = dao.getGUID(); DPL::OptionalString d_pkgname = dao.getPkgname(); - if(!d_guid.IsNull() && !strcmp(DPL::ToUTF8String(*d_guid).c_str(), temp_arg)) + if (!d_guid.IsNull() && + !strcmp(DPL::ToUTF8String(*d_guid).c_str(), temp_arg)) { DPL::Optional package_name = dao.getPkgname(); temp = DPL::ToUTF8String(*package_name).c_str(); break; } - if(!strcmp(DPL::ToUTF8String(*d_pkgname).c_str(), temp_arg)) - { + if (!strcmp(DPL::ToUTF8String(*d_pkgname).c_str(), temp_arg)) { DPL::Optional package_name = dao.getPkgname(); temp = DPL::ToUTF8String(*package_name).c_str(); break; } - } + } - if(temp !=NULL) - { + if (temp != NULL) { strncpy(pkgname, (char *)temp, strlen(temp)); - } - else - { + } else { printf("result: %s\n", "failed"); return -1; } } - if(op == 's') - { + if (op == 's') { /* check if this is request for debug mode, or not */ - if(b != NULL) - { + if (serviceHandle != NULL) { /* wait for return from the widget */ sigemptyset(&sigact.sa_mask); sigact.sa_flags = SA_SIGINFO; sigact.sa_restorer = NULL; sigact.sa_sigaction = sighandler; - if (sigaction(SIGRTMIN, &sigact, 0) == 1) - { - printf("signal error\n"); - return -1; + if (sigaction(SIGRTMIN, &sigact, 0) == 1) { + printf("signal error\n"); + return -1; } } - if(strlen(pkgname) > 0) - { - // do setuid to '5000' uid to communicate with webapp using RT signal. + if (strlen(pkgname) > 0) { + // do setuid to '5000' uid to communicate + //with webapp using RT signal. gid_t group_list[1]; group_list[0] = LOGGING_DEFAULT_GID; @@ -469,42 +437,73 @@ int main(int argc, char* argv[]) return -1; } - ret = aul_launch_app(pkgname, b); - } - else - { + // set package + ret = service_set_package(serviceHandle, pkgname); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to set package [" << ret << "]"); + service_destroy(serviceHandle); + return -1; + } + + //launch service + ret = service_send_launch_request(serviceHandle, NULL, NULL); + if (SERVICE_ERROR_NONE != ret) { + LogError("Fail to launch service [" << ret << "]"); + service_destroy(serviceHandle); + return -1; + } + + service_destroy(serviceHandle); + } else { printf("result: %s\n", "failed"); return -1; } - if(b != NULL) - { + if (serviceHandle != NULL) { // wait RTS signal from widget by 5 second sleep(timeout); printf("result: %s\n", "failed"); return -1; } - if(ret > 0) - { + if (ret > 0) { printf("result: %s\n", "launched"); - } - else - { + } else { printf("result: %s\n", "failed"); return -1; } - } - else if(op == 'k') - { - ret = aul_app_get_running_app_info(kill_widget, pkgname); + } else if (op == 'k') { + bool isRunning = false; - if(AUL_R_OK == ret) - { - printf("result: %s\n", "killed"); + //checks whether the application is running + ret = app_manager_is_running(pkgname, &isRunning); + if (APP_MANAGER_ERROR_NONE != ret) { + printf("result: %s\n", "failed"); + return -1; } - else - { + + if (true == isRunning) { + // get app_context for running application + // app_context must be released with app_context_destroy + app_context_h appCtx = NULL; + ret = app_manager_get_app_context(pkgname, &appCtx); + if (APP_MANAGER_ERROR_NONE != ret) { + printf("result: %s\n", "failed"); + return -1; + } + + // terminate app_context_h + ret = app_manager_terminate_app(appCtx); + if (APP_MANAGER_ERROR_NONE != ret) { + printf("result: %s\n", "failed"); + app_context_destroy(appCtx); + return -1; + } else { + printf("result: %s\n", "killed"); + app_context_destroy(appCtx); + return 0; + } + } else { printf("result: %s\n", "failed"); return -1; } @@ -516,24 +515,20 @@ int main(int argc, char* argv[]) static void sighandler(int signo, siginfo_t *si, void* /*data*/) { /* check if this signal is type of RTS */ - if(si->si_code == SI_QUEUE) - { + if (si->si_code == SI_QUEUE) { //int port; //printf("RTS pid : %d\n", si->si_pid); //port = (int) si->si_value.sival_ptr; //printf("RTS debug port : %d\n", port); // This sival_int is wrt's status (like WRT_SUCCESS..) // enum WRT_SUCCESS is 0 - if(si->si_value.sival_int > 0) - { + if (si->si_value.sival_int > 0) { printf("port: %d\n", (int)si->si_value.sival_int); printf("result: %s\n", "launched"); - } - else + } else { printf("result: %s\n", "failed"); - } - else - { + } + } else { printf("Not RT signal : %d\n", signo); } exit (0); -- 2.7.4