nsScriptablePeer.cpp
上传用户:hongyu5696
上传日期:2018-01-22
资源大小:391k
文件大小:12k
源码类别:

PlugIns编程

开发平台:

Unix_Linux

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
  2. /* ***** BEGIN LICENSE BLOCK *****
  3.  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Netscape Public License
  6.  * Version 1.1 (the "License"); you may not use this file except in
  7.  * compliance with the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/NPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is mozilla.org code.
  16.  *
  17.  * The Initial Developer of the Original Code is 
  18.  * Netscape Communications Corporation.
  19.  * Portions created by the Initial Developer are Copyright (C) 1998
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s):
  23.  *
  24.  * Alternatively, the contents of this file may be used under the terms of
  25.  * either the GNU General Public License Version 2 or later (the "GPL"), or 
  26.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27.  * in which case the provisions of the GPL or the LGPL are applicable instead
  28.  * of those above. If you wish to allow use of your version of this file only
  29.  * under the terms of either the GPL or the LGPL, and not to allow others to
  30.  * use your version of this file under the terms of the NPL, indicate your
  31.  * decision by deleting the provisions above and replace them with the notice
  32.  * and other provisions required by the GPL or the LGPL. If you do not delete
  33.  * the provisions above, a recipient may use your version of this file under
  34.  * the terms of any one of the NPL, the GPL or the LGPL.
  35.  *
  36.  * ***** END LICENSE BLOCK ***** */
  37. // ==============================
  38. // ! Scriptability related code !
  39. // ==============================
  40. /////////////////////////////////////////////////////
  41. //
  42. // This file implements the nsScriptablePeer object
  43. // The native methods of this class are supposed to
  44. // be callable from JavaScript
  45. //
  46. #include "plugin.h"
  47. static NS_DEFINE_IID(kIScriptabledownloadPluginIID,
  48.      NS_ISCRIPTABLEDOWNLOADPLUGIN_IID);
  49. static NS_DEFINE_IID(kIScriptableWMPPluginIID,
  50.      NS_ISCRIPTABLEWMPPLUGIN_IID);
  51. static NS_DEFINE_IID(kIClassInfoIID, NS_ICLASSINFO_IID);
  52. static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
  53. nsScriptablePeer::nsScriptablePeer(nsPluginInstance * aPlugin)
  54. {
  55.     mPlugin = aPlugin;
  56.     mRefCnt = 0;
  57.     mControls = NULL;
  58. }
  59. nsScriptablePeer::~nsScriptablePeer()
  60. {
  61. }
  62. void nsScriptablePeer::InitControls(nsControlsScriptablePeer * aControls)
  63. {
  64.     mControls = aControls;
  65. }
  66. // AddRef, Release and QueryInterface are common methods and must
  67. // be implemented for any interface
  68. NS_IMETHODIMP_(nsrefcnt) nsScriptablePeer::AddRef()
  69. {
  70.     ++mRefCnt;
  71.     return mRefCnt;
  72. }
  73. NS_IMETHODIMP_(nsrefcnt) nsScriptablePeer::Release()
  74. {
  75.     --mRefCnt;
  76.     if (mRefCnt == 0) {
  77. delete this;
  78. return 0;
  79.     }
  80.     return mRefCnt;
  81. }
  82. // here nsScriptablePeer should return three interfaces it can be asked for by their iid's
  83. // static casts are necessary to ensure that correct pointer is returned
  84. NS_IMETHODIMP nsScriptablePeer::QueryInterface(const nsIID & aIID,
  85.        void **aInstancePtr)
  86. {
  87.     if (!aInstancePtr)
  88. return NS_ERROR_NULL_POINTER;
  89.     if (aIID.Equals(kIScriptabledownloadPluginIID)) {
  90. *aInstancePtr = NS_STATIC_CAST(nsIScriptabledownloadPlugin *, this);
  91. AddRef();
  92. return NS_OK;
  93.     }
  94.     if (aIID.Equals(kIClassInfoIID)) {
  95. *aInstancePtr = NS_STATIC_CAST(nsIClassInfo *, this);
  96. AddRef();
  97. return NS_OK;
  98.     }
  99.     if (aIID.Equals(kISupportsIID)) {
  100. *aInstancePtr =
  101.     NS_STATIC_CAST(nsISupports *,
  102.    (NS_STATIC_CAST
  103.     (nsIScriptabledownloadPlugin *, this)));
  104. AddRef();
  105. return NS_OK;
  106.     }
  107.     return NS_NOINTERFACE;
  108. }
  109. void nsScriptablePeer::SetInstance(nsPluginInstance * plugin)
  110. {
  111.     mPlugin = plugin;
  112. }
  113. //
  114. // the following method will be callable from JavaScript
  115. //
  116. NS_IMETHODIMP nsScriptablePeer::Play(void)
  117. {
  118.     printf("JS Play issuedn");
  119.     mPlugin->Play();
  120.     return NS_OK;
  121. }
  122. /* void PlayAt (in double value); */
  123. NS_IMETHODIMP nsScriptablePeer::PlayAt(double value)
  124. {
  125.     printf("JS Play issuedn");
  126.     mPlugin->PlayAt(value);
  127.     return NS_OK;
  128. }
  129. NS_IMETHODIMP nsScriptablePeer::Pause(void)
  130. {
  131.     printf("JS Pause issuedn");
  132.     mPlugin->Pause();
  133.     return NS_OK;
  134. }
  135. NS_IMETHODIMP nsScriptablePeer::Stop(void)
  136. {
  137.     printf("JS Stop issuedn");
  138.     mPlugin->Stop();
  139.     return NS_OK;
  140. }
  141. NS_IMETHODIMP nsScriptablePeer::Quit(void)
  142. {
  143.     printf("JS Quit issuedn");
  144.     mPlugin->Quit();
  145.     return NS_OK;
  146. }
  147. NS_IMETHODIMP nsScriptablePeer::DoPlay(void)
  148. {
  149.     printf("JS DoPlay issuedn");
  150.     mPlugin->Play();
  151.     return NS_OK;
  152. }
  153. NS_IMETHODIMP nsScriptablePeer::DoPause(void)
  154. {
  155.     printf("JS DoPause issuedn");
  156.     mPlugin->Pause();
  157.     return NS_OK;
  158. }
  159. NS_IMETHODIMP nsScriptablePeer::FastForward(void)
  160. {
  161.     printf("JS FastForward issuedn");
  162.     mPlugin->FastForward();
  163.     return NS_OK;
  164. }
  165. NS_IMETHODIMP nsScriptablePeer::FastReverse(void)
  166. {
  167.     printf("JS FastReverse issuedn");
  168.     mPlugin->FastReverse();
  169.     return NS_OK;
  170. }
  171. NS_IMETHODIMP nsScriptablePeer::Ff(void)
  172. {
  173.     printf("JS ff issuedn");
  174.     mPlugin->FastForward();
  175.     return NS_OK;
  176. }
  177. NS_IMETHODIMP nsScriptablePeer::Rew(void)
  178. {
  179.     printf("JS rew issuedn");
  180.     mPlugin->FastReverse();
  181.     return NS_OK;
  182. }
  183. NS_IMETHODIMP nsScriptablePeer::Rewind(void)
  184. {
  185.     printf("JS Quit issuedn");
  186.     mPlugin->FastReverse();
  187.     return NS_OK;
  188. }
  189. NS_IMETHODIMP nsScriptablePeer::Seek(double counter)
  190. {
  191.     printf("JS Seek issuedn");
  192.     mPlugin->Seek(counter);
  193.     return NS_OK;
  194. }
  195. NS_IMETHODIMP nsScriptablePeer::GetPlayState(PRInt32 * aPlayState)
  196. {
  197.     printf("JS playState issuedn");
  198.     mPlugin->GetPlayState(aPlayState);
  199.     return NS_OK;
  200. }
  201. NS_IMETHODIMP nsScriptablePeer::GetTime(double *_retval)
  202. {
  203.     printf("JS getTime issuedn");
  204.     mPlugin->GetTime();
  205. //    strcpy(filename,"asd");
  206.     return NS_OK;
  207. }
  208. NS_IMETHODIMP nsScriptablePeer::GetDuration(double *_retval)
  209. {
  210.     printf("JS getDuration issuedn");
  211.     mPlugin->GetDuration(_retval);
  212.     return NS_OK;
  213. }
  214. NS_IMETHODIMP nsScriptablePeer::GetPercent(double *_retval)
  215. {
  216.     printf("JS getPercent issuedn");
  217.     mPlugin->GetPercent(_retval);
  218.     return NS_OK;
  219. }
  220. NS_IMETHODIMP nsScriptablePeer::GetFilename(char **aFilename)
  221. {
  222.     mPlugin->GetFilename(aFilename);
  223.     return NS_OK;
  224. }
  225. NS_IMETHODIMP nsScriptablePeer::SetFilename(const char *aFilename)
  226. {
  227.     mPlugin->SetFilename(aFilename);
  228.     return NS_OK;
  229. }
  230. NS_IMETHODIMP nsScriptablePeer::Open(const char *filename)
  231. {
  232.     return NS_OK;
  233.     mPlugin->SetFilename(filename);
  234.     return NS_OK;
  235. }
  236. NS_IMETHODIMP nsScriptablePeer::SetFileName(const char *filename)
  237. {
  238.     mPlugin->SetFilename(filename);
  239.     return NS_OK;
  240. }
  241. /* void SetIsLooping (in boolean loop); */
  242. NS_IMETHODIMP nsScriptablePeer::SetIsLooping(PRBool loop)
  243. {
  244.     printf("JS SetIsLooping issuedn");
  245.     mPlugin->SetLoop(loop);
  246.     return NS_OK;
  247. }
  248. /* boolean GetIsLooping (); */
  249. NS_IMETHODIMP nsScriptablePeer::GetIsLooping(PRBool * _retval)
  250. {
  251.     printf("JS GetIsLooping issuedn");
  252.     mPlugin->GetLoop(_retval);
  253.     return NS_OK;
  254. }
  255. /* void SetAutoPlay (in boolean autoPlay); */
  256. NS_IMETHODIMP nsScriptablePeer::SetAutoPlay(PRBool autoPlay)
  257. {
  258.     printf("JS SetAutoPlay issuedn");
  259.     mPlugin->SetAutoPlay(autoPlay);
  260.     return NS_OK;
  261. }
  262. /* boolean GetAutoPlay (); */
  263. NS_IMETHODIMP nsScriptablePeer::GetAutoPlay(PRBool * _retval)
  264. {
  265.     printf("JS GetAutoPlay issuedn");
  266.     mPlugin->GetAutoPlay(_retval);
  267.     return NS_OK;
  268. }
  269.   /* boolean isplaying (); */
  270. NS_IMETHODIMP nsScriptablePeer::Isplaying(PRBool * _retval)
  271. {
  272.     printf("JS isplaying issuedn");
  273.     mPlugin->GetPlaying(_retval);
  274.     return NS_OK;
  275. }
  276. /* void playlistAppend (in string filename); */
  277. NS_IMETHODIMP nsScriptablePeer::PlaylistAppend(const char *item)
  278. {
  279.     mPlugin->PlaylistAppend(item);
  280.     return NS_OK;
  281. }
  282. /* void playlistClear (PRInt32 *_retval; */
  283. NS_IMETHODIMP nsScriptablePeer::PlaylistClear(PRBool * _retval)
  284. {
  285.     printf("JS playlistClear issuedn");
  286.     mPlugin->PlaylistClear(_retval);
  287.     return NS_OK;
  288. }
  289. /* void SetHREF (in string url); */
  290. NS_IMETHODIMP nsScriptablePeer::SetHREF(const char *url)
  291. {
  292.     mPlugin->SetFilename(url);
  293.     return NS_OK;
  294. }
  295. /* string GetHREF (); */
  296. NS_IMETHODIMP nsScriptablePeer::GetHREF(char **_retval)
  297. {
  298.     mPlugin->GetFilename(_retval);
  299.     return NS_OK;
  300. }
  301. /* void SetURL (in string url); */
  302. NS_IMETHODIMP nsScriptablePeer::SetURL(const char *url)
  303. {
  304.     mPlugin->SetFilename(url);
  305.     return NS_OK;
  306. }
  307. /* string GetURL (); */
  308. NS_IMETHODIMP nsScriptablePeer::GetURL(char **_retval)
  309. {
  310.     mPlugin->GetFilename(_retval);
  311.     return NS_OK;
  312. }
  313. /* string GetMIMEType (); */
  314. NS_IMETHODIMP nsScriptablePeer::GetMIMEType(char **_retval)
  315. {
  316.     printf("JS GetMIMEType issuedn");
  317.     mPlugin->GetMIMEType(_retval);
  318.     return NS_OK;
  319. }
  320. NS_IMETHODIMP nsScriptablePeer::WriteData(char **_retval)
  321. {
  322.     mPlugin->WriteData(_retval);
  323.     return NS_OK;
  324. }
  325. NS_IMETHODIMP nsScriptablePeer::DetectPlugin(const char *filename, char **_retval)
  326. {
  327.     mPlugin->Detectplugin(filename, _retval);
  328.     return NS_OK;
  329. }
  330. NS_IMETHODIMP nsScriptablePeer::GetPlugin(const char *url, char **_retval)
  331. {
  332.     mPlugin->Getplugin(url, _retval);
  333.     return NS_OK;
  334. }
  335. NS_IMETHODIMP nsScriptablePeer::GetData(char **_retval)
  336. {
  337.     mPlugin->GetData(_retval);
  338.     return NS_OK;
  339. }
  340. NS_IMETHODIMP nsScriptablePeer::GetShowControls(PRBool * aShowControls)
  341. {
  342.     printf("JS GetShowControls issuedn");
  343.     mPlugin->GetShowControls(aShowControls);
  344.     return NS_OK;
  345. }
  346. NS_IMETHODIMP nsScriptablePeer::SetShowControls(PRBool aShowControls)
  347. {
  348.     printf("JS SetShowControls issuedn");
  349.     mPlugin->SetShowControls(aShowControls);
  350.     return NS_OK;
  351. }
  352. NS_IMETHODIMP nsScriptablePeer::GetFullscreen(PRBool * aFullscreen)
  353. {
  354.     printf("JS GetFullscreen issuedn");
  355.     mPlugin->GetFullscreen(aFullscreen);
  356.     return NS_OK;
  357. }
  358. NS_IMETHODIMP nsScriptablePeer::SetFullscreen(PRBool aFullscreen)
  359. {
  360.     printf("JS SetFullscreen issuedn");
  361.     mPlugin->SetFullscreen(aFullscreen);
  362.     return NS_OK;
  363. }
  364. NS_IMETHODIMP nsScriptablePeer::GetShowlogo(PRBool * aShowlogo)
  365. {
  366.     printf("JS GetShowlogo issuedn");
  367.     mPlugin->GetShowlogo(aShowlogo);
  368.     return NS_OK;
  369. }
  370. NS_IMETHODIMP nsScriptablePeer::SetShowlogo(PRBool aShowlogo)
  371. {
  372.     printf("JS SetShowlogo issuedn");
  373.     mPlugin->SetShowlogo(aShowlogo);
  374.     return NS_OK;
  375. }
  376. NS_IMETHODIMP nsScriptablePeer::GetControls(nsIScriptableWMPPlugin *
  377.     *aControls)
  378. {
  379.     *aControls = mControls;
  380.     if (mControls == NULL)
  381. return NS_ERROR_NULL_POINTER;
  382.     else
  383. return NS_OK;
  384. }
  385. nsControlsScriptablePeer::nsControlsScriptablePeer(nsPluginInstance *
  386.    aPlugin)
  387. {
  388.     mPlugin = aPlugin;
  389.     mRefCnt = 0;
  390. }
  391. nsControlsScriptablePeer::~nsControlsScriptablePeer()
  392. {
  393.     //printf("~nsScriptablePeer calledn");
  394. }
  395. // AddRef, Release and QueryInterface are common methods and must
  396. // be implemented for any interface
  397. NS_IMETHODIMP_(nsrefcnt) nsControlsScriptablePeer::AddRef()
  398. {
  399.     ++mRefCnt;
  400.     return mRefCnt;
  401. }
  402. NS_IMETHODIMP_(nsrefcnt) nsControlsScriptablePeer::Release()
  403. {
  404.     --mRefCnt;
  405.     if (mRefCnt == 0) {
  406. //delete this;
  407. return 0;
  408.     }
  409.     return mRefCnt;
  410. }
  411. // here nsScriptablePeer should return three interfaces it can be asked for by their iid's
  412. // static casts are necessary to ensure that correct pointer is returned
  413. NS_IMETHODIMP nsControlsScriptablePeer::QueryInterface(const nsIID & aIID,
  414.        void **aInstancePtr)
  415. {
  416.     if (!aInstancePtr)
  417. return NS_ERROR_NULL_POINTER;
  418.     if (aIID.Equals(kIScriptableWMPPluginIID)) {
  419. *aInstancePtr = NS_STATIC_CAST(nsIScriptableWMPPlugin *, this);
  420. AddRef();
  421. return NS_OK;
  422.     }
  423.     if (aIID.Equals(kIClassInfoIID)) {
  424. *aInstancePtr = NS_STATIC_CAST(nsIClassInfo *, this);
  425. AddRef();
  426. return NS_OK;
  427.     }
  428.     if (aIID.Equals(kISupportsIID)) {
  429. *aInstancePtr =
  430.     NS_STATIC_CAST(nsISupports *,
  431.    (NS_STATIC_CAST
  432.     (nsIScriptableWMPPlugin *, this)));
  433. AddRef();
  434. return NS_OK;
  435.     }
  436.     return NS_NOINTERFACE;
  437. }
  438. void nsControlsScriptablePeer::SetInstance(nsPluginInstance * plugin)
  439. {
  440.     mPlugin = plugin;
  441. }
  442. //
  443. // the following method will be callable from JavaScript
  444. //
  445. NS_IMETHODIMP nsControlsScriptablePeer::Play(void)
  446. {
  447.     printf("JS Play issuedn");
  448.     mPlugin->Play();
  449.     return NS_OK;
  450. }
  451. NS_IMETHODIMP nsControlsScriptablePeer::Pause(void)
  452. {
  453.     printf("JS Pause issuedn");
  454.     mPlugin->Pause();
  455.     return NS_OK;
  456. }
  457. NS_IMETHODIMP nsControlsScriptablePeer::Stop(void)
  458. {
  459.     printf("JS Stop issuedn");
  460.     mPlugin->Stop();
  461.     return NS_OK;
  462. }